关于QT对象new了要不要delete的问题

QObject类建立的对象树确保了子对象在父对象析构时会被自动删除,防止内存泄漏。即使先删除子对象再删除父对象也是安全的。但如果反过来,先删除父对象再删除子对象,可能会导致问题,因为子对象在父对象析构时已被释放。对于非QObject派生的对象,仍需手动管理内存。
摘要由CSDN通过智能技术生成
  1. QObject维护了一个对象树, 所有从QObject创建的对象都会被记录到子对象列表中
  2. 父对象析构时会delete所有的子对象, 所以我们new的子对象就不用手动delete了, 也不会内存泄漏
  3. 子对象析构时会从父对象的对象树中把自己移除, 所以就算我们先delete了自己new的对象, 再delete父对象也没问题
  4. 但是, 如果先delete父对象, 然后又delete子对象就会出问题, 因为delete父对象时子对象已经被析构
  5. 结论: 如果是从QObject创建的对象, 则只要顶层的父对象确保能正确delete就不用担心内存泄漏的问题; 如果不是从QObject创建的对象则和普通C++对象一样要自己delete

参考资料Object Trees & Ownership | Qt Core 5.15.12

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值