c++ - 跟踪递归生成的指针
问题描述
我有一种情况,不清楚何时应该丢弃指针。这是由于使用递归的类基于输入调用了不同的方法。下面我重新创建了这种情况的一个非常粗略的例子。在我编写的代码中,而不是Data*
作为递归的返回,我使用了typedef boost::variant
混合了指针和标准类型的 a,这使得跟踪哪些是需要释放的指针变得更加困难。
struct Data {
int a = 2;
Data(int ca) {
a = ca;
}
};
class MemoryLeakCentral {
public:
MemoryLeakCentral(int a) {
doStuff(a);
}
~MemoryLeakCentral() {
/* delete all pointers */
}
Data* createPointer(int a) {
Data* data = new Data(a);
return data;
}
private:
Data* doStuff(int a) {
Data* data = createPointer(5);
/*
do stuff with "data"
e.g.
if(data->a == ...) {
data->a = ...
return doMoreStuff(data)
}
else if(...)
else if(...) etc
*/
return data;
}
Data* doMoreStuff(Data* data) {
/*
do stuff with "data"
if(data->a == ...) {
data->a = ...
return doMoreStuff(data)
}
else if(...)
else if(...) etc
*/
return data;
}
...
//more Data* returning functions
};
在上面的代码中,我试图营造一种递归是深刻而复杂的感觉。
我的问题是:让类MemoryLeakCentral
删除它在遇到析构函数后生成的所有指针的最佳方法是什么。我的一个想法是将创建的所有指针存储createPointer
在一个向量中,然后一旦~MemoryLeakCentral
调用,循环遍历该向量并删除所有指针。
那么有没有更好的解决方案呢?我知道创建指针的位置,但由于发生复杂的递归,无法轻易确定它在哪里被销毁。
解决方案
推荐阅读
- flutter - 颤动中动态创建的复选框不会改变点击状态
- ravendb - 如何在 ravendb 3.5 中找到附件?
- angular - 角度 markForCheck 与 detectChanges
- c# - 在 Xamarin.Forms/Android 中拍摄未初始化视图的快照
- python - 从线程内部设置全局异常处理程序(在 Django 中)
- bash - bash中参数替换中的一个或多个模式
- excel - 如果 Excel 表格列被过滤,我如何运行一些代码,如果它没有被过滤,我该如何运行其他代码?
- google-maps - 在 VUe 中使用 Geocorder 导致其他功能
- java - 如何通过 Java/Spring-Boot 使用服务主体连接到 Azure Blob 存储
- javascript - 无法读取未定义的属性“替换”