1、所有从QObject创建的对象,不用delete。其他的非QObject对象,需要手动delete。
QObject维护了一个对象树, 所有从QObject创建的对象都会被记录到子对象列表中;
父对象析构时会delete所有的子对象, 所以我们new的子对象就不用手动delete了, 也不会内存泄漏;
子对象析构时会从父对象的对象树中把自己移除, 所以就算我们先delete了自己new的对象, 再delete父对象也没问题;
但是, 如果先delete父对象, 然后又delete子对象就会出问题, 因为delete父对象时子对象已经被析构;
结论:如果是从QObject创建的对象, 则只要顶层的父对象确保能正确delete就不用担心内存泄漏的问题; 如果不是从QObject创建的对象则和普通C++对象一样要自己delete
文章讲述了在C++中,从QObject派生的对象会自动在父对象析构时被删除,避免内存泄漏。非QObject对象需手动删除。若先删除父对象再删除子对象会导致错误。
1115

被折叠的 条评论
为什么被折叠?



