题
我有一个指针,它指向我穿过类QScriptEngine
的重载类的构造,并为其分配到一个Evaluator
QScriptEngine *engine_
(类Property
子类Evaluator
,并调用Evaluator
的此构造,传递一个已经分配QScriptEngine
)。不带参数的构造函数创建新的QScriptEngine
指针(类Generic
子Evaluator
以这种方式)。在析构函数中我测试,如果engine_
不NULL
,删除指针,然后将其指定NULL
。应在派生engine_
指针(Property
)现在也可以NULL
?有个声音告诉我这是不是这样的。如果没有,你是如何处理这种情况?我需要的QScriptEngine
是整个相同的实例。 QScriptEngine
的=运算符是私有的,不然我就避免了指针一起。
我看到在另一个SO问题共享指针(boost::shared_ptr
和std:tr1::shared_ptr
)一些信息。我已经使用了正则表达式库的升压,升压这样是不是出了问题,如果这对解决这个问题的最好办法。希望有一个非升压方式,对于一般的C ++知识和未来的项目。
解决方案
可以通过给予类(类A),使指针的寿命控制的一个,以“吸气剂”的方法沿着解决这个问题。其他类(B类)总是调用的getter方法时,它需要的指针。这样一来,A保持在指针在所有时间的控制。缺点是吸气功能(它大概会内联,但它仍然是一个第二间接)。此外,B是将不得不检查指针为NULL上几乎每一个使用。
您另一种选择是通过保持底层指针,只有删除它时,共享该指针的所有对象都将被删除包裹在类似的boost :: shared_ptr的(如果使用得当),这需要照顾的问题的指针。你可以这样写自己,但既然你已经在玩有提升,我只是用自己的实现。
第三个选择是重新的因素,整个事情,这样你就不需要共享指针。我个人从来没有设计出所需的共享指针一个C ++程序,只是因为它是一个地方的内存管理错误很容易蔓延多年来,但是这只是我。