我需要一些关于下一个情况的解释。假设我们有下一个代码:
class MyClass : public QObject
{
public:
MyClass(QObject* parent = nullptr)
{
m_member.reset(new QObject(this));
}
~MyClass(){} override;
private:
QScopedPointer< QObject> m_member;
};我无法理解将带有父对象的对象传递给QScopedPointer是否安全。当对象被父对象和智能指针删除两次并导致崩溃时,是否存在这种情况?
发布于 2018-03-01 21:02:11
这完全安全。以下是MyClass实例被销毁时发生的情况:
MyClass的析构函数(在您的示例中不做任何操作)MyClass的所有成员变量都被破坏。在您的例子中,QScopedPointer的析构函数被调用,这意味着子QObject被删除。当QObject被销毁时,它就是从其父母的子女名单中删除,所以父程序不再尝试删除这个QObject。QObject的MyClass实例的析构函数被调用,它看不到要删除的子程序。如果没有理由动态分配子成员QObject,也可以考虑按值保存它。
https://stackoverflow.com/questions/49058172
复制相似问题