0

我有大量的指针,例如:

int *m_Data[1000];

在破坏过程中,我应该始终保持元素明智还是有更好的方法?

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

3 回答 3

3

您可以使用智能指针(例如std::unique_ptr)而不是原始指针,而不必担心手动删除:

std::unique_ptr<int> m_Data[1000];
于 2013-10-10T15:42:13.223 回答
3
int *m_Data[1000];

1000是一个指向s的指针数组,int具有自动存储持续时间。

你需要为delete每一个都打电话new,即:delete[]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 回答
0

也许您可以执行以下操作:

int* m_Data = new int[1000];

// ...

delete [] m_Data;

或者:

int m_Data[1000]; // Why to allocate each element dynamically ?

在这种情况下,您不需要删除任何元素。

但是,如果您需要一个一个地动态分配每个元素:

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 回答