我有一个指针,它指向我穿过类QScriptEngine的重载类的构造,并为其分配到一个Evaluator QScriptEngine *engine_(类Property子类Evaluator,并调用Evaluator的此构造,传递一个已经分配QScriptEngine)。不带参数的构造函数创建新的QScriptEngine指针(类GenericEvaluator以这种方式)。在析构函数中我测试,如果engine_NULL,删除指针,然后将其指定NULL。应在派生engine_指针(Property)现在也可以NULL?有个声音告诉我这是不是这样的。如果没有,你是如何处理这种情况?我需要的QScriptEngine是整个相同的实例。 QScriptEngine的=运算符是私有的,不然我就避免了指针一起。

我看到在另一个SO问题共享指针(boost::shared_ptrstd:tr1::shared_ptr)一些信息。我已经使用了正则表达式库的升压,升压这样是不是出了问题,如果这对解决这个问题的最好办法。希望有一个非升压方式,对于一般的C ++知识和未来的项目。

有帮助吗?

解决方案

可以通过给予类(类A),使指针的寿命控制的一个,以“吸气剂”的方法沿着解决这个问题。其他类(B类)总是调用的getter方法时,它需要的指针。这样一来,A保持在指针在所有时间的控制。缺点是吸气功能(它大概会内联,但它仍然是一个第二间接)。此外,B是将不得不检查指针为NULL上几乎每一个使用。

您另一种选择是通过保持底层指针,只有删除它时,共享该指针的所有对象都将被删除包裹在类似的boost :: shared_ptr的(如果使用得当),这需要照顾的问题的指针。你可以这样写自己,但既然你已经在玩有提升,我只是用自己的实现。

第三个选择是重新的因素,整个事情,这样你就不需要共享指针。我个人从来没有设计出所需的共享指针一个C ++程序,只是因为它是一个地方的内存管理错误很容易蔓延多年来,但是这只是我。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top