Nasıl silmek mi []'bir dizi s biliyor musun?
Tamam, hepimiz aşağıdaki kod ile ne tanımsız, geçirilir, ne bağlı olduğunu kabul düşünüyorum
void deleteForMe(int* pointer)
{
delete[] pointer;
}
İşaretçiyi farklı şeyler olabilir, ve bu yüzden delete[]
koşulsuz gerçekleştirme tanımsızdır. Ama gerçekten dizinin bir işaretçi geçirmeden, biz varsayalım
int main()
{
int* arr = new int[5];
deleteForMe(arr);
return 0;
}
Benim sorum işaretçi, bu durumdabir dizi, bunu bilen kim? Görünüm dil/derleyici açısından, ya da arr
bir dizi işaretçisi karşı tek bir int bir işaretçi olup olmadığını hiç bir fikrin yok yani. Heck, hatta arr
dinamik olarak oluşturulan olup olmadığını bilmiyor. Eğer takip etmek yerine yaparsam yine
int main()
{
int* num = new int(2);
deleteForMe(num);
return 0;
}
OS Akıllı silmek için sadece bir dizi değil, bir tür 'seri cinayetler' tarafından siliniyor gerisi anısına ötesinde bu nokta (kontrast strlen
ve bir sigara-\0
-sonlandırılmış dize olur devam et kadar vurur 0).
Kimin işi bu şeyleri hatırlamak mı? İşletim sistemi arka planda kayıt türü geliyor? (Yani, anladım ki başladığım bu yazı diyerek ne olur tanımlanmamış, ama gerçek şu ki, 'katliam' senaryo olmaz, bu yüzden bu pratik dünyabirihatırlamak.)
CEVAP
Bir soru da verilen cevaplar şu ana kadar yok gibi görünüyor Adres: çalışma zamanı kitaplıkları (OS, gerçekten) kalabilir parça sayısı şeylerde dizi, o zaman neden ihtiyacımız var delete[]
sözdizimi var mı? Neden ** 15 tek bir form olarak kullanılır işlemek için kullanılabilir mi?
Bunun cevabı da C 'nin C-uyumlu bir dil olarak kökleri artık çok olmaya çalışır.) gider Stroustrup felsefesi programcı kullanarak olmadıkları tüm özellikler için ödemek zorunda olmamalıdır. Eğer diziler kullanıyorlar eğer değilse, o zaman bellek ayrılan her parça için nesne dizileri maliyeti taşımak zorunda değil.
Eğer sadece kod mu?
Foo* foo = new Foo;
sonra foo
için ayrılacak bellek alanı Foo
dizileri desteklemek için gerekli herhangi bir ek yük içermemelidir.
Dizi dizi ayırmalarını ekstra boyut bilgileri taşımak için ayarlanmış olduğundan sadece, daha sonra çalışma zamanı nesneleri sildiğinizde bu bilgi aramak için kütüphaneler söylemek lazım. Bunu kullanmak için ihtiyacımız var
delete[] bar;
yerine sadece
delete bar;
bar ise bir dizi için bir işaretçi.
Çoğumuz için (ben de dahil), hafıza fazladan birkaç bayt bu konuda titizlik şirin görünen o ki bugünlerde. Ama hala bir kaç byte (bellek blokları çok yüksek bir sayı olabilir) tasarruf önemli olabilir bazı durumlar vardır.
Nasıl Javascript Nesneleri bir Dizi kl...
Nasıl 'hata' ne anlama geldi...
Nasıl bir öğeyi silmek veya bir dizi n...
Nasıl birim testleri yazarken test ne ...
C bir dizi öğe silmek için nasıl#...