Bunun gibi bazı kod yazıyorum:C++ içindeki statik bir diziyi silmem gerekir mi?
döngünün her fırsatta içinwhile(true) {
int array[5];
// do something
}
, dizi, yeni bir dizidir. Döngünün sonunda diziyi silmem gerekir mi? yığın ilan
Bunun gibi bazı kod yazıyorum:C++ içindeki statik bir diziyi silmem gerekir mi?
döngünün her fırsatta içinwhile(true) {
int array[5];
// do something
}
, dizi, yeni bir dizidir. Döngünün sonunda diziyi silmem gerekir mi? yığın ilan
Dizinin sonundaki döngüyü silmem gerekir mi?
Hayır, sen array
otomatik depolama süresi vardır çünkü silmek için gerek yoktur. Her döngüden çıktığı zaman serbest bırakılacak.
Çiftler halinde delete []/new []
ve delete/new
'u aramanız gerekir.
sayılı
Değişkenler elle ayırmanın için gerek yoktur. Diziniz while
döngüsünde kapsamlıdır. Döngünün her yinelemesi için, dizi yığına tahsis edilir ve daha sonra otomatik olarak ayrılır.
new[]
ile beyan bir dizi manuel Ayrıca
delete[]
ile ayırmanın olması gerektiğinden, beyan dizisi herhangi bir anlamda static
değildir. static
anahtar kelimesinin C dilinde belirli bir anlamı vardır. Bildirdiğiniz dizi aslında auto
(otomatik depolama) değişkeni olarak saklanır, yani kapsam dışına çıktığında otomatik olarak ayrılır.
(Karmaşık bir derleme kullanmıyorsanız) yapamazsınız ve yığında tahsis edilen dizileri veya nesneleri silmenize gerek yoktur.
nedense oluşturduğunuz diziyi silmek ihtiyacı hissediyorsanız
,:int *array = new int[5];
//do something
delete[] array;
Ayrıca benim tavsiyem diziler yerine std::vector
kullanmaktır.
Niçin uygulamanın ne olduğunu bilmeden standart kitaplıktan sürekli olarak bir şeyler kullanıyor musunuz? –
Diğer yanıtlar, diziniz yığın üzerinde olduğu için delete
'un gereksiz olduğunu doğru şekilde açıkladı, ancak yığının ne olduğunu açıklamamışlar. Burada oldukça mükemmel bir açıklama var: What and where are the stack and heap?
Sorunuzda da görüldüğü gibi: C ve C++ 'da, derleyiciye başka şekilde açık bir şekilde söylemediğiniz sürece, değişkenleriniz yığının içine yerleştirilir. beyan ettikleri bloktur. Derleyiciye öbekte bir şey koymasını açıkça söyleme yolu, malloc
(C yolu) veya new
(C++ yolu). Sadece o zaman free
(C) veya delete
/delete[]
(C++) 'yi aramanız gerekir.
Evet, büyük olasılıkla, "sil" yığında değişkenlere uygulandığında bir anlamı olmamalıdır. Daha iyi bir ifade önerebilir misin? –
(Orijinalin bu şekilde doldurulamamın nedeni, asıl sorunun "diziyi silmek için ** ihtiyacım var" olmasıydı, "yani bunu yapmak gerekliydi ve cevap hayır, gerekli değil." –
Evet, yığın demek istedim. Teşekkürler. Bu, eski bir yoruma yapılan bir düzenlemeden ziyade bir yorum olarak daha yararlı olurdu, ancak düzenleme için bir bildirim almadım. –
Başparmak kuralı: her 'yeni' için tam olarak bir 'sil '; her bir "yeni [] için tam olarak bir" sil "[]. –
Bu soruyu neredeyse aynı şekilde neredeyse birçok kez sorulmuştur. Pinky kuralı ... ilk başta, özellikle basit bir soru ise, dups için bakın. – thang