我有一些(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,它提供类似于语法的指针并包装动态分配的对象。销毁后,它会自动销毁它指向的对象。
您可以为数组实现类似的功能。