大量的指针删除

时间:2013-10-10 15:36:33

标签: c++ arrays pointers delete-operator

我有大量的指针,如:

int *m_Data[1000];

在毁灭期间,我应该总是以元素为主,还是有更好的方法?

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

3 个答案:

答案 0 :(得分:3)

int *m_Data[1000];

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

您需要为deletenewdelete[]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);

在这种情况下,当对象被破坏时,将自动释放元素所在的内存(如果需要,将为每个元素调用适当的析构函数)。

答案 1 :(得分:3)

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

std::unique_ptr<int> m_Data[1000];

答案 2 :(得分: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);