2015-10-23 34 views
5

Herkes!Öğe başına öğe başına [] öğesine eşittir. C++

  1. delete[] data;

  2. :

    ben Array sınıfını yazma ve inşaat sektörünü,

    data = reinterpret_cast<T*>(new char[sizeof (T) * size]); 
        for (int i = 0; i < size; ++i) { 
         new(&data[i]) T(some_value); 
    } 
    

    optimize etmek istediğiniz Ve şimdi doğru belleği boşaltmak için nasıl merak ediyorum ediyorum Diyelim for (int i = 0; i < size; ++i) { data_[i].~T(); }

+0

['std :: array'] (http://en.cppreference.com/w/cpp/container/array) dosyasını yeniden yazmaya çalışıyor musunuz? – NathanOliver

+0

Ayrılmış dizi T için doğru hizalama değilse ne olur? –

+0

@NathanOliver, elbette bunu yapmaya çalışmıyorum :-) Hepsi bu benim meraklı hayal gücüm. – aob

cevap

2

ifade silme [] veri eşleşmelidir öbek üzerinde dizi oluşturulan yeni T [], Tverileri * türü olduğu şekilde. Aksi halde programın davranışı tanımlanmamıştır (5.3.5). Örnekte

, verilerine ve * verilerinin türü bilinmiyor. Tchar değilse, davranış tanımsızdır.

Sen değil çağrı bile döngü içinde yıkıcı çağırdıktan sonra [] veri silmek olmalıdır. Tanımlanmamış davranışlardan kaçınmak için [] reinterpret_cast < char * > (veri) numaralı telefonu silmek daha iyi olur. Hafızayı boşaltmadan önce T tipindeki yıkıcılar mutlaka çağrılmalıdır.

1

Verilerin başında delete no'lu döküm makinesini arayınız.

// First step 
for (int i = 0; i < size; ++i) { 
    data_[i].~T(); 
} 

// Second step 
delete [] data; 
0
// First, you must call the destructors, so that objects will be destroyed 
for (int i = 0; i < size; ++i) { 
    data_[i].~T(); 
} 

// Then, deallocate memory from the heap. 
delete[] data; 
İlgili konular