首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何“释放”QDialog实例的成员变量QJsonObject?

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

Stack Overflow用户
提问于 2018-09-11 03:04:37
回答 1查看 107关注 0票数 0

与许多QObjects不同,QJsonObject's constructor不会接收“父”指针作为参数。它也不会响应"setParent“。如果一个类有一个成员变量是一个QJsonObject,我有责任在类的析构函数中释放它吗?例如,

代码语言:javascript
复制
// 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-11 03:25:48

需要在动态存储中创建吗?为什么不干脆让它成为ClassA的非动态数据成员呢

代码语言:javascript
复制
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++的主要原则之一。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52263976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档