Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为父级声明子级是Qt中的共享指针_C++_Qt_C++11_Visual C++ - Fatal编程技术网

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
中?父母拥有它的专属所有权。是的,你是对的。我没有找到任何其他的方法来解决这个问题。