gpt4 book ai didi

c++ - 在我的函数中重新创建一个微型垃圾收集系统是不是很疯狂?

转载 作者:可可西里 更新时间:2023-11-01 16:52:50 25 4
gpt4 key购买 nike

我有一些 (C++) 函数,每个函数都包含几个调用,在堆上创建相同基本类型的类似数组。在这些函数的不同位置,我可能需要抛出异常。跟踪哪些数组已被删除是一件很痛苦的事情,而且很容易出错,所以我考虑只将数组指针添加到 Set<ArrType*> 中。 ,当我捕获到异常时,我可以删除其中的每个项目,如下所示:

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

感觉有点像添加本轮,但我无法回避这样一个事实,即几个外部调用中的任何一个都可能抛出异常,我需要明确删除到那个点之前分配的所有指针。

这只是愚蠢吗?我应该在外部调用周围添加更小的 try-catch block 吗?我仍然会得到删除 A 的小列表;删除乙;删除 D;每一个之后...

最佳答案

为什么不使用像boost::shared_array这样的智能指针呢?或使用堆栈分配的 std::vector ?对于单个分配而不是数组分配,您可以使用 boost::shared_ptr .

这些实现了 RAII为你。即使您正在重复使用像 RAII 这样的概念,如果已经有满​​足您要求的具体实现,您仍然在重新发明轮子。

关于c++ - 在我的函数中重新创建一个微型垃圾收集系统是不是很疯狂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1207456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com