我有一些(C++)函数,每个函数包含多个调用,这些调用在堆上创建具有相同基本类型的相似数组。在这些函数的各个地方,我可能需要抛出一个异常。跟踪删除哪些数组是一件很痛苦的事情,而且容易出错,因此我考虑将数组指针添加到Set<ArrType*>,当我捕获到异常时可以删除其中的每一项,就像这样:

try
{
   set<ArrType*> sHeap;
   ArrType* myArr = new ArrType[5];
   sHeap.Add(myArr);
   someExternalRoutine(myArr);
   ...
}
catch(CString s)
{
   DeleteAllPointersInMyHeap(sHeap);
   throw(s);
}

感觉有点像添加Epicycle,但是我无法回避几个外部调用中的任何一个都可能引发异常的事实,并且我确实需要删除到目前为止分配的所有指针。

这只是愚蠢吗?我是否应该在外部调用周围添加较小的try-catch块?我仍然会得到删除A的少量 list 。删除B;删除D;每个人之后...

最佳答案

您不必依赖垃圾回收。

您有std::auto_ptr,它提供类似于语法的指针并包装动态分配的对象。销毁后,它会自动销毁它指向的对象。

您可以为数组实现类似的功能。

09-28 04:16