c++ - QT4内存管理

标签 c++ qt memory-management qt4

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

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

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

}

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

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

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

3)如果我创建一个 QWidget 的子类,并将其添加到 QWindow,我如何确保当 QWindow 被销毁时,它会带走我的小部件?

感谢您的帮助。

最佳答案

If I create a QList and add objects to it, and then the QList goes out of scope, will it try to deallocate the child objects?

QList 就像 std::list。它会在销毁时销毁包含的对象。

If a Qt4 routine returns a pointer to an object, am I then responsible for the de-allocation of that object?

通常不会,文档应该指定会发生什么。一个异常(exception)是 take* 函数(例如:QTableWidget::takeItem)。

If I create a subclass of a QWidget, and add it to a QWindow, how do I insure that when the QWindow is destroyed, that it takes my widget with it?

这取决于你如何创建子类对象。

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

当一个 QWidget(或任何 QObject)被销毁时,它会将自己从其父级的待删除列表中删除,因此您可以自己删除它而不必担心重复删除。

关于c++ - QT4内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2200421/

相关文章:

python - 如何确定 Python 中对象的大小?

c++ - 以毫秒为单位花费时间

c++ - boost::asio::strand && boost::lockfree::spsc_queue

qt - 将 QT 应用程序从 Linux 移植到 Windows?

c++ - 如果有的话,有没有办法获得 QColor 的智能名称?

file - Windows OpenCV VideoCapture 无法打开视频文件

linux - RAM如何分配?

Java XML 解析器无需过多内存分配

c++ - C++中的多重继承,它看起来像菱形,但实际上不是

c++ - 将 blender 模型导入 DirectX 11.2 C++ 应用程序