C++ 如何为父级声明子级是Qt中的共享指针
我的班级声明如下:C++ 如何为父级声明子级是Qt中的共享指针,c++,qt,c++11,visual-c++,C++,Qt,C++11,Visual C++,我的班级声明如下: class GuiImpl : public Gui , protected QScrollArea { public: typedef QScrollArea Base; public: GuiImpl (QWidget *parent) : Base(parent) , view(0) { } ~GuiImpl () { } 此类是QScrollArea的子类,父类将删除该对象。问
class GuiImpl : public Gui
, protected QScrollArea
{
public:
typedef QScrollArea Base;
public:
GuiImpl (QWidget *parent)
: Base(parent)
, view(0)
{
}
~GuiImpl () { }
此类是QScrollArea
的子类,父类将删除该对象。问题是我将对象存储在std::shared_ptr
中,因此当父对象删除对象时,计数器不会减少,共享指针会在之后再次尝试删除对象,这会导致代码中出现错误
是否要将子对象声明为父对象的共享对象,以便父对象在引用计数器为零时删除该对象?您可以在父对象的析构函数中分离子对象:
class Parent
{
// ... Any your code
QSharedPointer< QObject > child;
~Parent()
{
child->setParent(nullptr);
}
};
类父类
{
//…你的代码有什么问题吗
QSharedPointerchild;
~Parent()
{
child->setParent(nullptr);
}
};
但这很难看。相反,您不应该使用共享指针,正如@molbdilo在注释中所写的那样。如果您不喜欢原始指针,可以使用
QPointer
包装器。为什么要将其存储在共享\u ptr
中?父母拥有它的专属所有权。是的,你是对的。我没有找到任何其他的方法来解决这个问题。