如何“释放”作为QDialog实例的成员变量的QJsonObject?

问题描述 投票:0回答:1

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吗?

qt
1个回答
3
投票

您需要在动态存储中创建它吗?为什么不让它成为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 ++的主要原则之一。

© www.soinside.com 2019 - 2024. All rights reserved.