1

我有一个指向 a 的指针QScriptEngine,我正在通过 class 的重载类构造函数Evaluator并将其分配给QScriptEngine *engine_(类Property子类Evaluator,并调用此构造函数Evaluator,将其传递给已分配的QScriptEngine)。不带参数的构造函数创建新QScriptEngine指针(以这种方式创建Generic子类Evaluator)。engine_在我测试 if is not的析构函数中NULL,删除指针,然后分配它NULLengine_现在派生的指针 ( )Property也应该是NULL? 有些东西告诉我事实并非如此。如果没有,您如何处理这种情况?我需要QScriptEngine始终是同一个实例。QScriptEngine's = 运算符是私有的,否则我会一起避免指针。

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

4

1 回答 1

4

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

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

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

于 2009-10-30T02:16:45.923 回答