安全删除指针数组的指针

时间:2012-02-14 02:52:04

标签: c++ arrays 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;

由于

3 个答案:

答案 0 :(得分:0)

我认为你需要做的是创建一个堆栈对象,它接受一个指针数组的指针,并在其析构函数中进行清理。类似的东西:

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;
};

没有智能指针可以做到这一点,所以你必须自己动手。

答案 1 :(得分:0)

如果目标是异常阻力,那么你不应该做这样的事情 -

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

答案 2 :(得分:0)

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