如何避免动态分配的小部件中的内存泄漏

时间:2015-05-24 17:18:17

标签: c++ qt qwidget

我必须在主窗口中显示一个widgetA,而不必将其作为主窗口的子窗口。所以,如果我动态分配内存空间,它将趋向于泄漏内存

Widget *wid = new Widget;
wid->show();

所以我想知道如何优雅地处理小部件的动态内存分配而不会泄漏。

2 个答案:

答案 0 :(得分:5)

QT是相当古老的学校C ++,所以它的许多例子只使用原始指针和delete的手动调用而不符合RAII。这在实践中可以很好地工作,因为大多数QObjects通常可以很快地将所有权转移到符合RAII的容器,除了少数,并且因为Qt几乎不会抛出异常。

然而,它确实提供了这样的智能指针:

http://doc.qt.digia.com/4.6/qscopedpointer.html

QScopedPointer<Widget> wid(new Widget);
wid->show();
// `wid` will automatically call `delete` when it goes out of scope.

由于您经常需要转移所有权以执行诸如将子窗口小部件插入布局之类的操作,因此take方法在此处变得非常方便,这基本上等同于release的{​​{1}}方法。

我建议只是坚持使用标准的C ++智能指针,例如std::unique_ptr,在这种情况下你可以这样做:

unique_ptr

...但是,您是否想要深入了解QT或更接近C ++标准的领域,这取决于您。

答案 1 :(得分:1)

您可以将mainwindow设置为父级,然后启用Qt::Window标记。这是&#34; Qt方式&#34;。