QJsonObject's constructor没有像许多QObject那样接收“父”指针作为参数。它也不响应“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
吗?
您需要在动态存储中创建它吗?为什么不让它成为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 ++的主要原则之一。