gpt4 book ai didi

c++ - 使用 D_ptr 实现析构函数

转载 作者:行者123 更新时间:2023-11-30 05:21:56 28 4
gpt4 key购买 nike

我尝试在 Qt 小部件中实现使用 D_ptr 的 PIMPL 方法。

下面的代码是我实现的。

class GuiCentralHandler : public QWidget
{
Q_OBJECT
public:
GuiCentralHandler (QWidget *parent = 0);
~GuiCentralHandler ();

protected:
GuiCentralHandlerPrivate * const d_ptr;

private: //class methods
Q_DECLARE_PRIVATE(GuiCentralHandler )
};

GuiCentralHandler ::GuiCentralHandler (QWidget *parent)
:QWidget(parent),d_ptr(new GuiCentralHandlerPrivate (this))
{
}

GuiCentralHandler ::~GuiCentralHandler ()
{
Q_D(GuiCentralHandler );
delete &d_ptr;
}

我的私有(private) d_ptr 是

class GuiCentralHandlerPrivate 
{
Q_DECLARE_PUBLIC(GuiCentralHandlerPrivate )
public:
GuiCentralHandlerPrivate (GuiCentralHandler *parent);

protected:
GuiCentralHandler * const q_ptr;
};

GuiCentralHandlerPrivate ::GuiCentralHandlerPrivate (GuiCentralHandler *parent)
: q_ptr(parent)
{
}

但是当我调用 GuiCentralHandler::~GuiCentralHandler () 的析构函数时它正在崩溃。我如何从主小部件中删除 d_ptr 或 d_func。请指出我在这个实现中哪里出了问题。

最佳答案

你应该传递一个指向 operator delete 的指针而不是指针的地址:

delete d_ptr;

代替:

delete &d_ptr;

Here ,你可以找到关于d指针的信息

关于c++ - 使用 D_ptr 实现析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39868198/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com