Ich denke, mein Destructor der Vector-Klasse sollte if
Anweisung haben, um den Speicher zu löschen, den es verwendet. Wenn arr
ein Element hat, wird es delete arr
haben. Und wenn arr
viele Mitglieder hat, muss ich delete[] arr
verwenden.C++: Benötige ich eine "if" -Anweisung für Destruktor?
Können Sie mir sagen, dass das notwendig ist?
Mein Code:
class Vector {
double * arr;
short dim;
public:
Vector(short d = 0): dim(d) {
arr = NULL;
if (dim < 0) {
dim = 0;
} else {
arr = new double[dim];
}
}
~Vector() {
if (arr != NULL) {
if (dim == 1) {
delete arr;
} else {
delete[] arr;
}
arr = NULL;
dim = 0;
}
}
};
"Wenn' arr' ein Mitglied hat, wird es 'delete arr' haben." Was lässt dich das denken? – juanchopanza
Unzusammenhängend, ich sehe keinen Grund für das "dim" -Mitglied oder den zur Initialisierung vorgesehenen Konstruktionsparameter, signiert * zu sein. Für solche Dinge wäre 'std :: size_t' besser geeignet. – WhozCraig
Das Setzen von 'arr' auf' NULL' und 'dim' auf' 0' am Ende des Destruktors ist sinnlos, da das Objekt weggeht. Niemand wird jemals diese Werte sehen. Und der Test für 'NULL' wird nicht benötigt, daher kann der Destruktor-Body viel einfacher sein:' ~ vector() {delete [] arr; } '. –