dte*_*ech 8 c++ qt memory-management undefined-behavior qobject
根据Qt文档:
QObjects在对象树中组织自己.当您使用另一个对象作为父对象创建QObject时,该对象将自动将其自身添加到父对象的children()列表中.父母取得对象的所有权; 即,它将自动删除其析构函数中的子项.
对于我来说,这意味着当一个QObject被删除时,它会通过并在它存储在子列表中的所有指针上调用delete.
但是,没有必要动态分配子项,并且使用堆栈分配的对象构建QObject树是完全合法的.
根据标准规范,对未指向动态分配对象的指针调用delete是未定义的行为,这可能导致从"无"到程序崩溃的任何内容.
IMO不太可能是QObject,它几乎是几乎整个Qt类集合的主干,依赖于可能产生未定义行为的东西.
那么,QObject在删除时是否区分堆栈和堆分配子项?如果是这样,究竟是怎么回事?
And*_*ter 10
但是,没有必要动态分配子项,并且使用堆栈分配的对象构建QObject树是完全合法的.
不.请参阅QObject :: ~QObject():
警告:删除所有子对象.如果这些对象中的任何一个在堆栈或全局上,则程序迟早会崩溃.