繁体   English   中英

安全删除指向指针数组的指针

[英]Safely delete pointer to array of pointers

我有一个指向数组的指针,无论在哪里发生异常,都希望将其安全删除。 现在,我必须遍历数组并在每个项目上调用delete,然后在数组上调用delete []。 auto_ptr似乎只是删除数组,而不删除数组中的各个指针。 有一个简单的解决方案吗?

double** desc = new MyObject*[size_out];
for (int i=0; i<size_out; i++)
     desc[i] = new MyObject();

for (int i=0; i<size_out; i++)
    delete desc[i];
delete [] desc;

谢谢

我认为您将要做的是创建一个堆栈对象,该对象将一个指针指向一个指针数组,并在其析构函数中进行清理。 就像是:

template <typename T>
struct ArrayDeleter
{
  ArrayDeleter(T** array, size_t size) 
  : m_array(array), m_size(size) 
  {}

  ~ArrayDeleter()
  {
    for (size_t i = 0; i != m_size; ++i)
    {
      delete m_array[i];
    }
    delete [] m_array;
  }

  T** m_array;
  size_t m_size;
};

没有智能指针可以执行此操作,因此您只需要自己做即可。

如果目标是抗拒异常,那么您不应该这样做吗?

for (int i=0; i<size_out; i++)
{
   try
      delete desc[i];
   catch(...)
      continue;
}
delete [] desc;

一个好的经验法则是确保构造函数和析构函数不会引发异常。 在构造函数/析构函数中捕获它们。 然后,您可以删除单个指针,然后删除数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM