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
吗?
答案 0 :(得分: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 ++的主要宗旨之一。