0

次のようなポインタの大きな配列があります。

int *m_Data[1000];

破壊の間、私は常に要素ごとに行くべきですか、それとももっと良い方法はありますか?

for(int i = 0; i<1000; i++)
  delete m_Data[i];
4

3 に答える 3

3
int *m_Data[1000];

自動保存期間を持つ s1000へのポインタの配列です。int

deletefor 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);

この場合、要素が存在するメモリは、オブジェクトが破棄されるときに自動的に解放されます (必要に応じて、各要素に対して適切なデストラクタが呼び出されます)。

于 2013-10-10T15:38:02.827 に答える
3

生のポインターの代わりにスマート ポインター ( などstd::unique_ptr) を使用でき、手動での削除について心配する必要はありません。

std::unique_ptr<int> m_Data[1000];
于 2013-10-10T15:42:13.223 に答える
0

多分あなたは次のようなことができます:

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);
于 2013-10-10T15:38:02.013 に答える