QT4内存管理

Tim*_*dge 5 c++ qt memory-management qt4

我来自一个相当强大的C背景,并且在C++中有相当坚实的基础.最近我一直在使用C#和其他更高级别的语言.我正在研究的项目可以从使用QT4中获益,但我对内存管理有一些问题,我似乎无法理解.我已经阅读了QT4文档,但对我没什么帮助.所以这就是我在这里的原因.

1)好的,首先,我了解使用QT4对象的最简单方法是在本地声明它们:

void MyFunc()
{
     QString foo;
     // do stuff to foo

}
Run Code Online (Sandbox Code Playgroud)

这很简单,我可以拿走那个对象,并传递它,并知道当它超出范围时它将被销毁.但这是我的问题.

1)如果我创建一个QList并向其添加对象,然后QList超出范围,它是否会尝试释放子对象?

2)如果QT4例程返回指向对象的指针,那么我是否负责取消该对象的分配?

3)如果我创建QWidget的子类,并将其添加到QWindow,我如何确保在QWindow被销毁时,它需要我的小部件?

谢谢您的帮助.

rpg*_*rpg 13

如果我创建一个QList并向其添加对象,然后QList超出范围,它是否会尝试释放子对象?

QList就像std :: list一样.它会在被破坏时销毁所包含的对象.

如果Qt4​​例程返回指向对象的指针,那么我是否负责该对象的取消分配?

通常不会,文档应该指明发生了什么.take*函数是一个例外(例如:QTableWidget :: takeItem).

如果我创建一个QWidget的子类,并将其添加到QWindow,我如何确保在QWindow被销毁时,它需要我的小部件呢?

这取决于您如何创建子类对象.

  • 您可以将其添加为窗口小部件的成员(顺便说一下,没有QWindow),它将像任何成员变量一样被销毁.
  • 您可以使用new分配它,并将窗口作为父窗口传递给它,由于Qt对象树的实现,它将被删除(如提到的蛋糕)
  • 你可以自己做内存管理.

当一个QWidget(或任何QObject)被销毁时,它会从其父级的删除列表中删除它,这样你就可以自己删除它而不用担心双重删除.