我想在一些(两个或更多)容器中存储指向一个对象实例的指针。我在这个想法中遇到了一个问题:如何处理删除此对象。对象有相当暴风雨的生活(我说的是游戏,但我认为这种情况并不那么具体)并且可以经常删除。在我看来,这个问题分为两个问题
1。 我应该如何向容器发出关于删除的信号?在C#中,我曾经在存储过的对象中创建布尔属性IsDead,因此主循环的每次迭代首先找到“死”对象并将其删除。没有循环引用,一切都很清楚:-)这种技术是否正确?
2。 即使我在C ++中实现这种技术,如果这个对象在某些容器中,我也会遇到调用析构函数的困难。即使我创建某种字段'IsDead'并从所有列表中删除死对象,我也必须释放内存 在阅读了一些文章后,我知道我应该有一个'main'容器,其中包含shared_ptr给我的所有对象,而其他容器应该将weak_ptr存储到它们中,所以只有主容器检查对象的状态而其他容器只查看shared_ptr。我的意图是否正确还是有另一种解决方案?
答案 0 :(得分:1)
听起来你正在寻找shared_ptr<T>
。
这是在C ++中计算ptr的引用,可以轻松共享对象。 shared_ptr<T>
可以自由地分发给多个对象。当shared_ptr
实例被复制并且取消对,内部引用计数器将被适当更新。删除所有引用后,将删除基础数据。