2013-02-15 19 views
7

Bunun gibi bazı kod yazıyorum:C++ içindeki statik bir diziyi silmem gerekir mi?

döngünün her fırsatta için
while(true) { 
    int array[5]; 
    // do something 
} 

, dizi, yeni bir dizidir. Döngünün sonunda diziyi silmem gerekir mi? yığın ilan

+4

Başparmak kuralı: her 'yeni' için tam olarak bir 'sil '; her bir "yeni [] için tam olarak bir" sil "[]. –

+0

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

cevap

12

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.

+0

yine de yapabilir misin? – dtc

+0

@dtc nope, yeni olmayan nesneleri silemezsiniz. – billz

+0

Tamam, hızlı cevap için teşekkürler. sadece merak ettim: P. – dtc

1

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.

Sadece 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.

0

(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.

+0

Niçin uygulamanın ne olduğunu bilmeden standart kitaplıktan sürekli olarak bir şeyler kullanıyor musunuz? –

0

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.

+0

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? –

+0

(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." –

+0

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. –

İlgili konular