如何为父母声明孩子是Qt中的共享指针
Posted
技术标签:
【中文标题】如何为父母声明孩子是Qt中的共享指针【英文标题】:How to declare for the parent that the child is a shared pointer in Qt 【发布时间】:2015-04-09 11:35:45 【问题描述】:我有一个类声明如下:
class GuiImpl : public Gui
, protected QScrollArea
public:
typedef QScrollArea Base;
public:
GuiImpl (QWidget *parent)
: Base(parent)
, view(0)
~GuiImpl ()
该类是QScrollArea
的子类,该对象将被父类删除。问题是我将对象存储在std::shared_ptr
中,所以当父级删除对象时,计数器不会减少,共享指针会在之后再次尝试删除对象,这会导致我的代码出现错误。
有没有办法将子代声明为父代的shared_ptr
,这样父代就在引用计数器为零时删除对象?
【问题讨论】:
为什么将它存储在shared_ptr
中?父级对其拥有独占所有权。
是的,你是对的。我没有找到任何其他方法来解决它。
【参考方案1】:
您可以在父级的析构函数中分离子级:
class Parent
// ... Any your code
QSharedPointer< QObject > child;
~Parent()
child->setParent(nullptr);
;
但这很丑。相反,您不应该使用共享指针,正如@molbbdilo 在评论中所写。如果您不喜欢原始指针,可以使用 QPointer
包装器。
【讨论】:
以上是关于如何为父母声明孩子是Qt中的共享指针的主要内容,如果未能解决你的问题,请参考以下文章