次のようなポインタの大きな配列があります。
int *m_Data[1000];
破壊の間、私は常に要素ごとに行くべきですか、それとももっと良い方法はありますか?
for(int i = 0; i<1000; i++)
delete m_Data[i];
次のようなポインタの大きな配列があります。
int *m_Data[1000];
破壊の間、私は常に要素ごとに行くべきですか、それとももっと良い方法はありますか?
for(int i = 0; i<1000; i++)
delete m_Data[i];
int *m_Data[1000];
自動保存期間を持つ s1000
へのポインタの配列です。int
delete
for everynew
およびdelete[]
for everyを呼び出す必要がありますnew[]
。つまり、次のようになります。
for(int i = 0; i<1000; i++)
delete m_Data[i];
以前に次のようなことを行っていた場合にのみ正しいです。
for(int i = 0; i<1000; i++)
m_Data[i] = new int;
「何か良い方法はありますか?」-はい:
std::vector<int> m_data(1000);
この場合、要素が存在するメモリは、オブジェクトが破棄されるときに自動的に解放されます (必要に応じて、各要素に対して適切なデストラクタが呼び出されます)。
生のポインターの代わりにスマート ポインター ( などstd::unique_ptr
) を使用でき、手動での削除について心配する必要はありません。
std::unique_ptr<int> m_Data[1000];
多分あなたは次のようなことができます:
int* m_Data = new int[1000];
// ...
delete [] m_Data;
または:
int m_Data[1000]; // Why to allocate each element dynamically ?
この場合、要素を削除する必要はありません。
ただし、各要素を 1 つずつ動的に割り当てる必要がある場合:
int *m_Data[1000];
for( int i = 0; i < 1000; i++ )
m_Data[i] = new int;
// ...
for( int i = 0; i < 1000; i++ )
delete m_Data[i]; // To need to deallocate each element.
のようなコンテナを使用しないのはなぜstd::vector
ですか?
std::vector<int> m_Data(1000);