与许多QObjects不同,QJsonObject's constructor不会接收“父”指针作为参数。它也不会响应"setParent“。如果一个类有一个成员变量是一个QJsonObject,我有责任在类的析构函数中释放它吗?例如,
// In the .h
class ClassA : public QDialog
{
Q_OBJECT
public:
ClassA(QWidget *pParent = 0);
private:
QJsonObject *jsonObject;
}
// In the .cpp
ClassA::ClassA(QWidget *pParent):QDialog(pParent)
{
jsonObject = new QJsonObject;
// Doesn't work:
// jsonObject = new QJsonObject(this);
// Also doesn't work
// jsonObject->setParent(this);
}
我是否应该重新定义ClassA的析构函数并显式销毁成员变量jsonObject
发布于 2018-09-11 03:25:48
需要在动态存储中创建吗?为什么不干脆让它成为ClassA
的非动态数据成员呢
class ClassA : public QDialog
{
Q_OBJECT
public:
ClassA(QWidget *pParent = 0);
private:
QJsonObject jsonObject; // note this is just a standard data member, not a pointer
}
现在,当ClassA
被销毁时,jsonObject
也将被销毁。
根据经验,在可能的情况下,您应该始终支持非动态分配(即,使其成为普通数据成员),因此对象的生命周期由封闭对象的作用域管理。
如果你没有听说过RAII (资源分配就是初始化),我强烈建议你去读一读。这是C++的主要原则之一。
https://stackoverflow.com/questions/52263976
复制相似问题