C++ 删除共享指针

C++ 删除共享指针,c++,shared-ptr,C++,Shared Ptr,我有一个指向QScriptEngine的指针,我正在通过classEvaluator的重载类构造函数传递该指针,并将其分配给QScriptEngine*engine(classProperty子类Evaluator,并调用Evaluator的此构造函数,将已分配的QScriptEngine传递给它)。不带参数的构造函数创建新的QScriptEngine指针(class泛型子类Evaluator)。在析构函数I测试中,如果引擎不是空,请删除指针,然后将其分配给空。指针(引擎)在派生的属性中现在也变

我有一个指向
QScriptEngine
的指针,我正在通过class
Evaluator
的重载类构造函数传递该指针,并将其分配给
QScriptEngine*engine
(class
Property
子类
Evaluator
,并调用
Evaluator
的此构造函数,将已分配的
QScriptEngine
传递给它)。不带参数的构造函数创建新的
QScriptEngine
指针(class
泛型
子类
Evaluator
)。在析构函数I测试中,如果
引擎
不是
,请删除指针,然后将其分配给
。指针(
引擎
)在派生的
属性中
现在也变为
NULL
?某种情况告诉我情况并非如此。如果不是,您如何处理这种情况?我需要
QScriptEngine
始终是同一个实例。
QScriptEngine
的s=运算符是私有的,否则我将一起避免指针


我看到了一些关于共享指针的信息(
boost::shared_ptr
std:tr1::shared_ptr
)在另一个问题中,我已经使用ReaveX库的Boost,所以Boost不是解决问题的最佳方法。希望有一个非提升的方式,用于一般C++知识和未来项目。该指针的生命周期控制,以及一个“getter”方法。另一个类(类B)总是在需要指针时调用a的getter。这样,a始终保持对指针的控制。缺点是getter函数(它可能是内联的,但仍然是第二个间接的).而且,B在几乎每次使用时都必须检查指针是否为NULL

您的另一个选择是将指针封装在boost::shared_ptr之类的东西中,它可以解决问题(如果使用正确的话)通过持有底层指针,并且只有在所有共享该指针的对象都被删除时才删除它。您可以自己编写这个,但既然您已经有了boost,我就使用它们的实现


第三个选项是重新考虑整个事情,这样你就不需要共享指针。我个人从来都没有设计过一个需要共享指针的C++程序,只是因为它是内存管理漏洞在过去几年中容易爬行的地方,但这只是我。< /P> < P>你可以通过给一个类(A类)来解决这个问题。该指针的生命周期控制,以及一个“getter”方法。另一个类(类B)总是在需要指针时调用a的getter。这样,a始终保持对指针的控制。缺点是getter函数(它可能是内联的,但仍然是第二个间接的).而且,B在几乎每次使用时都必须检查指针是否为NULL

您的另一个选择是将指针封装在boost::shared_ptr之类的东西中,它可以解决问题(如果使用正确的话)通过持有底层指针,并且只有在所有共享该指针的对象都被删除时才删除它。您可以自己编写这个,但既然您已经有了boost,我就使用它们的实现


第三个选择是重新考虑整个事情,这样你就不需要共享指针。我个人从来都没有设计过一个C++程序,它需要共享指针,只是因为它是内存管理漏洞在过去几年里容易爬行的地方,但那只是我自己。关于未来的问题。这比我想象的要简单得多。唯一的问题是我必须区分属性中的文本和图形显示,这没有问题;一个新的构造函数和一个if-else语句可以解决这一问题。是的,在与您就未来的问题达成一致后,我选择了第三个选项。是的比我想象的要简单得多。唯一的问题是我必须区分属性中的文本和图形显示,这没有问题;一个新的构造函数和一个if-else语句可以解决这个问题。