由释放内存的角度考虑,还是应该善于指定parent

之前由于QStandardItem的内存释放问题还专门发了博客。

Qt中QStandardItem的堆内存释放需要单独delete,还是随QStandardItemModel的remove或clear自动销毁?_大橘的博客-CSDN博客QStandardItem是否需要单独被delete?还是随着QStandardItemModel执行remove和clear自动被销毁?https://blog.csdn.net/u012999461/article/details/125248881

突然觉得parent这个属性如果可以,都应该在new的时候指定为好。毕竟根据QObject的说明,parent的意义,在销毁对象时十分有用。

在多线程使用中,很多时候要用到MoveToThread,而它要求被移动到线程的对象不能有parent,这是肯定的,否则就会产生混乱。试想,运行与某线程中的对象,它自然要和这个线程同存亡。而通过MoveToThread进入线程的对象,它本身又是在线程外被创建的,所以当然不能被指定parent,否则它将来要被谁终结?

而之前我也发过另外一篇博客。

Qt线程的this,volatile,exec(),moveToThread()_大橘的博客-CSDN博客发帖自己记录。线程对象和线程执行两者不是一回事。很多人说法不同,但都是一个意思。我理解是:所谓新开一个线程,需要类似这样的操作:QThread *thd = new Qthread;其实这段代码还是在主线程中执行的,亦即,thd这个对象是主线程中的一个对象,有人说他是用来管理线程的也对,大概就这个意思。所以线程代码中的所有成员变量和函数,都是在thd这个对象当中,例如写个槽函数之类,相当于还是运行于主线程。所谓真正的子线程过程,仅仅是线程中定义的run函数当中的代码,run代码执行完,线https://blog.csdn.net/u012999461/article/details/124688509线程本来是个好东西,但是它又是通过线程对象管理和运行的,而线程对象实际是父线程中的对象,所以在线程代码中,this关键字还无法全权代表线程过程,this仅仅是存在于父线程当中的线程对象的指针。

所以,再次提到前面的问题,在线程中new对象时,如果使用了this指定其parent,隐患必然出现。因此在线程中new时,我是不指定parent的,因为this不能用,貌似也没有其它方法来用。

如果哪位朋友觉得我哪里说的不对,再探讨。我的建议是,恰当的位置输出currentThreadId比较能说明问题。

还是那句话,我认为使用new操作时,如果可以,尽量指定parent,也尽量在合适的位置写delete或者deletelater,提高程序的健壮性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值