我有一个指向QScriptEngine
的指针,我正在通过类Evaluator
的重载类构造函数,并将其分配给QScriptEngine *engine_
(类Property
子类{{ 1}},并调用此Evaluator
的构造函数,并将其传递给已分配的Evaluator
)。没有参数的构造函数以这种方式创建新的QScriptEngine
指针(类QScriptEngine
子类Generic
)。在析构函数中,我测试Evaluator
是否不是engine_
,删除指针,然后分配它NULL
。派生的NULL
中的指针(engine_
)现在也应该是Property
吗?有些东西告诉我情况并非如此。如果没有,你如何应对这种情况?我需要NULL
始终是同一个实例。 QScriptEngine
's =运算符是私有的,或者我会将指针全部避开。
我在另一个SO问题中看到了有关共享指针(QScriptEngine
和boost::shared_ptr
)的一些信息。我已经在正则表达式库中使用了boost,所以如果这是处理这个问题的最佳方法,那么提升并不是不可能的。对于一般的C ++知识和未来的项目,希望有一种非增强的方式。
答案 0 :(得分:4)
您可以通过给予该指针的一个类(A类)生命周期控制以及“getter”方法来解决此问题。另一个类(B类)总是在需要指针时调用A的getter。这样,A始终保持对指针的控制。下行是getter函数(它可能是内联函数,但它仍然是第二个间接函数)。此外,B几乎每次使用时都必须检查指针是否为NULL。
你的另一个选择是将指针包装在boost :: shared_ptr之类的东西中,它通过保存底层指针来处理问题(如果使用得当),并且只有在删除共享该指针的所有对象时才删除它。你可以自己写一下,但既然你已经有了提升,我就会使用他们的实现。
第三种选择是重新考虑整个事物,以便您不需要共享指针。我个人从来没有设计过需要共享指针的C ++程序,只是因为它是多年来内存管理错误很容易蔓延的地方,但那只是我。