根据 Qt 文档:
QObjects 在对象树中组织自己。当您以另一个对象作为父对象创建 QObject 时,该对象将自动将自身添加到父对象的 children() 列表中。父级获得对象的所有权;即,它将自动删除其析构函数中的子级。
对我来说,这意味着当 QObject 被删除时,它会遍历并调用它存储在其子列表中的所有指针的 delete。
然而,子节点没有必要被动态分配,使用堆栈分配的对象构建 QObject 树是完全合法的。
根据标准规范,对不指向动态分配对象的指针调用 delete 是未定义的行为,这可能导致从“无”到程序崩溃的任何事情。
IMO 不太可能 QObject,它几乎是整个 Qt 类集合的支柱,依赖于可能产生未定义行为的东西。
那么,QObject 在删除时是否区分栈和堆分配的孩子呢?如果是这样,究竟如何?