首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >QSA的子对象删除问题

QSA的子对象删除问题
EN

Stack Overflow用户
提问于 2011-04-25 05:44:12
回答 1查看 64关注 0票数 0

我在删除QSA的引用对象时遇到了一些问题。在构造函数中,我写道:

代码语言:javascript
运行
AI代码解释
复制
  QSProject * project = {initialization of QSProject}
  MyWrapper * wrapper = new MyWrapper; // MyWrapper is QObject's child. It comes without parent here
  project->addObject(wrapper);

我在“脱衣舞者”中写道:

代码语言:javascript
运行
AI代码解释
复制
  project->clearObjects();
  delete project;
  delete wrapper;

当我试图删除包装时,这段代码会导致析构函数执行时出现分段错误。

我做了一些研究,我知道:

  1. QSProject不删除他的“子对象”,所以这不是“双重删除”问题
  2. 如果我不在构造函数中向QSProject添加包装器,它就能正常工作。
  3. 如果我不删除descructor中的包装器,它可以正常工作(但是内存泄漏)。

出什么事啦?

EN

回答 1

Stack Overflow用户

发布于 2011-04-25 08:35:17

首先,我不熟悉QSA,但考虑到QSA通常的工作方式,QSProject很可能会拥有对象的所有权。这意味着QSProject正在使用QObject::setParent()修复对象。

在这种情况下,您将加倍删除对象。

您是否已经用像valgrind这样的工具来验证,当您省略删除时,您实际上是在泄漏内存?

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

https://stackoverflow.com/questions/5778949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文