我有几个简单的 C++ 类来保存数据。它们是分层的,每个都包含一个指向子对象的指针列表(因为我在内存中有很多它们,我不想复制它们)。
我只在最高级别工作(将其传递给函数),并且希望每个级别的析构函数都销毁其子级,所以我要做的就是释放所有这些子级,只需在最顶层的父级上调用 delete。当在堆栈上创建某些类时,这会导致问题,但这实际上只是问题的症状。
正如我所看到的,我需要在同一级别上创建和销毁对象,从而知道我是否应该调用 delete。但是,这将迫使我在代码中每次使用后都持有指向所有子级的指针并销毁它们,这是一个比在最顶层的父级上调用 delete 更脏的解决方案。
所以,我的选择是:
- 永远不要在堆栈上定义它们(坏)
- 在构造函数中传递一个布尔值,指示该对象是否应该被删除(坏)
- 每次使用后手动删除对象,具体取决于我创建它们的方式(坏)
- “本地”复制项目(可能有成千上万的项目是不好的)
- 智能指针?一些框架?(我可以使用的东西相当有限)
我错过了什么吗?还有其他想法吗?
谢谢,瓦迪姆。