Ich schreibe eine Template-Klasse, die intern ein Array des angegebenen Typs verwaltet. Wie folgt aus:Löscht [] Aufrufdestruktoren?
template<typename T>
class Example {
// ...
private:
T* objects; // allocated in c'tor (array), deleted in d'tor
// ...
};
Ich frage mich, ob C++ ruft die destructor jedes Objekts in objects
, wenn ich es über delete[] objects;
löschen.
Ich muss das wissen, weil die Objekte in meiner Klasse die ganze Zeit keine vernünftigen Werte enthalten, so dass die Destruktoren nicht aufgerufen werden sollten, wenn sie es nicht tun.
Außerdem würde ich gerne wissen, ob die Destruktoren aufgerufen würden, wenn ich ein Array fester Größe wie T objects[100]
als Teil von Example<T>
deklariert.
"weil die Objekte in meiner Klasse die ganze Zeit keine vernünftigen Werte enthalten" Diese Klasse klingt gebrochen. –
Die Klasse ist eine Sammlung, die Speicherplatz im Voraus reserviert, den sie nicht immer verwendet. Ich muss diesen Raum nicht mit NULLs füllen, weil die Klasse bereits weiß, welche Elemente verwendet werden und welche nicht. – Mixthos
Wenn 'new []' Konstruktoren aufruft, ist es nur logisch für 'delete []' Destruktoren aufzurufen. Es ist nur logisch. – dtech