c++ - self 删除 QObjects 的最佳方式

标签 c++ qt qobject self-destruction

我有两个类 Node 和 NodeContainer:

class Node: public QObject
{
    NodeContainer* parent;
}

class NodeContainer : QObject
{
    bool deleteChild(Node*child)
    {
        if(childNodes->remove(child))
        {
            deleteLater(child);
        }
    }

    QList<Node*> childNodes;
}

节点可以有父节点,也可以没有父节点。 实现 Node 类销毁的更好方法是什么:

1) 访问父级并从那里销毁自己

destroy()
{
    if(parent !=0)
    {
        parent.deleteChild(this);
    }
    else
    {
        deleteLater(this);
    }
}

2)发出信号,让父级稍后销毁

destroy()
{
    if(parent !=0)
    {
        //Once the parent receives it, the parent will delete the child.
        emit parentYouHaveToDeleteChild(this);
    }
    else
    {
        deleteLater(this);
    }
}

最佳答案

如果 parentYouHaveToDeleteChild 信号连接到 deleteChild 插槽,则您提供的两种方法实际上没有区别。在调用槽之前,程序不会返回事件循环。

除了第二种方法增加了信号/槽调用的开销。

关于c++ - self 删除 QObjects 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9522559/

相关文章:

c++ - 类接口(interface)设计困境

c++ - OpenCV RHO 单应性方法不适用于 perspectiveTransform

c++ - Qt 在 QtWebEngine View 中显示 QImage 或像素图(从 C++ 到 HTML)

Qt从字符串中删除正则表达式

c++ - 为什么 Qt 看不到我的插槽?

C++ - 解析具有多个定界符的 .text 文件,显示字符串

c# - 在网络中保持对象同步?

C++ Qt 返回对临时对象的引用

c++ - Qt QObject 和 boost::enable_shared_from_this

c++ - 如何在 QML 中编辑 QQmlListProperty