Class name{
private:
int *ptr=new ptr[10];
public:
//do some thing
~name(){
delete ptr; //should I do this?
}
};
内部の配列を割り当て削除し、私は自動的にこの動的に割り当てられた整数配列を扱うデストラクタを書くべきですか?ダイナミックは、このクラスを作成した後、クラス
Class name{
private:
int *ptr=new ptr[10];
public:
//do some thing
~name(){
delete ptr; //should I do this?
}
};
内部の配列を割り当て削除し、私は自動的にこの動的に割り当てられた整数配列を扱うデストラクタを書くべきですか?ダイナミックは、このクラスを作成した後、クラス
はい、割り当てるメモリを解放する必要があります。しかし、new[]
で割り当てられたメモリは、delete
ではなく、delete[]
を使用して解放する必要があります。
class name {
private:
int *ptr = new ptr[10];
public:
//...
~name() {
delete[] ptr;
}
};
何がやるべきことは代わりにstd::vector
かstd::array
を使用し、それはあなたのためのメモリ管理を処理できるようです。
class name {
private:
std::vector<int> ptr{10};
public:
//...
};
class name {
private:
std::array<int, 10> ptr;
public:
//...
};
それをローカル変数(クラスに対してローカル)として宣言すると、クラスオブジェクトの破棄時にローカル変数が自動的に破棄されますか? –
@NygenPatriciaはい。非ポインタクラスのメンバーは、そのクラスを含むクラスが破壊されたときに破棄されます。 –
はい。すべての「新規」には「削除」コールが必要です。 – MayurK