以下のVectorクラスのデストラクタには、使用するメモリをキャンセルするにはif
ステートメントが必要です。 arr
にメンバーが1人いる場合はdelete arr
となります。 arr
にメンバーが多い場合は、delete[] arr
を使用する必要があります。C++:デストラクタのif文が必要ですか?
教えてもらえますか?
マイコード:
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;
}
}
};
"もし' arr'が1つのメンバを持っていれば 'delete arr'を持っています"あなたはそれをどう思いますか? – juanchopanza
関連していないので、私はこれの 'dim'メンバには何も理由がなく、*初期化するために提供された構築パラメータも* signed *ではありません。このようなことについては、 'std :: size_t'がより適切でしょう。 – WhozCraig
'arr'を' NULL'に、 'dim'をデストラクタの終わりで' 0'に設定するのは、オブジェクトがなくなるため無意味です。誰もそれらの価値観を見ることはありません。そして、 'NULL'のテストは必要ないので、デストラクタ本体ははるかに単純になります:'〜vector(){delete [] arr; } '。 –