Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT中的动态内存释放_C++_Qt - Fatal编程技术网

C++ QT中的动态内存释放

C++ QT中的动态内存释放,c++,qt,C++,Qt,QT编码中动态分配的指针是如何销毁的,因为我们没有为它们编写特定的析构函数 简单的回答是: QoObject在对象树中组织它们自己。当您创建一个以另一个对象为父对象的QObject时,它将添加到父对象的子对象()列表中,并在创建父对象时删除 Qt对框架内的对象层次结构和所有权有很好的说明。您可以阅读它展开,Qt有两种对象管理方法: QObject树结构 托管指针类 而这两者并没有很好地结合,原因很明显 s可以是“免费”的,也可以有父级。当一个QObject设置了其父对象(通过向QObject构造

QT编码中动态分配的指针是如何销毁的,因为我们没有为它们编写特定的析构函数

简单的回答是:

QoObject在对象树中组织它们自己。当您创建一个以另一个对象为父对象的QObject时,它将添加到父对象的子对象()列表中,并在创建父对象时删除

Qt对框架内的对象层次结构和所有权有很好的说明。您可以阅读它

展开,Qt有两种对象管理方法:

  • QObject树结构
  • 托管指针类
  • 而这两者并没有很好地结合,原因很明显

    s可以是“免费”的,也可以有父级。当一个QObject设置了其父对象(通过向QObject构造函数提供指向另一个QObject的指针,或通过调用
    setParent()
    )时,父QObject将成为子QObject的所有者,并确保在创建时销毁其任何子QObject。还有几种方法可用于检查子/父关系

    管理动态分配对象的另一种方法是托管指针类,它解释得很好。总结一下:

    • “该类存储指向动态分配对象的指针,并在销毁时将其删除”,因此,当您需要具有明确且明显的所有权和生存期的对象时,该类非常有用
    • “该类持有对共享指针的强引用,[并且]如果没有其他QSharedPointer对象引用它,它将在超出范围时删除它所持有的指针”,因此在所有权不明确时是好的,但您希望确保它不会丢失并成为内存泄漏。可用于共享指针,而不表示任何所有权

    正如您所看到的,一些受保护的指针类可以与QObject树一起使用,但在这样做之前,您应该确保彻底阅读并理解文档,否则可能会导致数据结构损坏。

    您能举个例子吗?您能推荐一本学习QT的书吗?它为像我这样的初学者提供了基础知识。我有C++ GUI编程,用QT4的书,但没有提供太多的帮助!你不需要一本书:使用Qt文档!先看一下下面的例子。把你的手放在手边,查你不懂的东西。我建议也使用QtCreator,只需按CTRL+K并键入“?”即可在QtCreator中搜索Qt文档。