删除共享指针

时间:2009-10-30 02:04:39

标签: c++ shared-ptr

我有一个指向QScriptEngine的指针,我正在通过类Evaluator的重载类构造函数,并将其分配给QScriptEngine *engine_(类Property子类{{ 1}},并调用此Evaluator的构造函数,并将其传递给已分配的Evaluator)。没有参数的构造函数以这种方式创建新的QScriptEngine指针(类QScriptEngine子类Generic)。在析构函数中,我测试Evaluator是否不是engine_,删除指针,然后分配它NULL。派生的NULL中的指针(engine_)现在也应该是Property吗?有些东西告诉我情况并非如此。如果没有,你如何应对这种情况?我需要NULL始终是同一个实例。 QScriptEngine's =运算符是私有的,或者我会将指针全部避开。

我在另一个SO问题中看到了有关共享指针(QScriptEngineboost::shared_ptr)的一些信息。我已经在正则表达式库中使用了boost,所以如果这是处理这个问题的最佳方法,那么提升并不是不可能的。对于一般的C ++知识和未来的项目,希望有一种非增强的方式。

1 个答案:

答案 0 :(得分:4)

您可以通过给予该指针的一个类(A类)生命周期控制以及“getter”方法来解决此问题。另一个类(B类)总是在需要指针时调用A的getter。这样,A始终保持对指针的控制。下行是getter函数(它可能是内联函数,但它仍然是第二个间接函数)。此外,B几乎每次使用时都必须检查指针是否为NULL。

你的另一个选择是将指针包装在boost :: shared_ptr之类的东西中,它通过保存底层指针来处理问题(如果使用得当),并且只有在删除共享该指针的所有对象时才删除它。你可以自己写一下,但既然你已经有了提升,我就会使用他们的实现。

第三种选择是重新考虑整个事物,以便您不需要共享指针。我个人从来没有设计过需要共享指针的C ++程序,只是因为它是多年来内存管理错误很容易蔓延的地方,但那只是我。