如何为父级声明子级是Qt中的共享指针
How to declare for the parent that the child is a shared pointer in Qt
我有一个如下的类声明:
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
,以便父对象在引用计数器为零时删除对象?
您可以在父级的析构函数中分离子级:
class Parent
{
// ... Any your code
QSharedPointer< QObject > child;
~Parent()
{
child->setParent(nullptr);
}
};
但这太难看了。相反,您不应该使用共享指针,正如@molbbdilo在评论中所写的那样。如果您不喜欢原始指针,可以使用QPointer
包装器。
相关文章:
- Qt中的实现指针(PIMPL)
- 关于如何使用指向主窗口的指针的 QT 问题
- 在 QTextEdit 中使用指针或在 Qt-Creator 上使用 connect()
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 类指针之间的 Qt 差异
- 字符指针的 Qt 数组
- 如何将函数指针传递给方法,以便它可以在Qt的connect()中使用?
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- Qt - 将空指针(原始数据)转换为 QImage 并将其显示在标签上
- 指针作为类变量 Qt
- Qt单元测试:指针列表上的QCOMPARE函数
- 如何抓取指向Qt中弹出对话框的指针,该对话框阻止了QTest中的UI线程
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- C++/(Qt) 指向具有特定方法的任何对象的指针
- C++ QT:获取指向信号的指针和插槽功能的函数
- 如何在启动时在Qt应用程序中隐藏鼠标指针
- QT创建者(4.2.2)编辑器中的独特指针导航
- Qt:通过深度复制访问列表中的数据结构是否应该比通过指针访问它慢得多
- 将指针初始化为QlistWidgetItem QT 5.8
- 我应该如何在Qt中存储指针