我必须在主窗口中显示一个小部件,而不使它成为主窗口的子窗口。因此,如果我动态分配内存空间,它将倾向于泄漏内存
Widget *wid = new Widget;
wid->show();
所以我想知道如何优雅地处理一个小部件的动态内存分配而不泄漏。
QT是相当老派的c++,所以它的许多例子只是使用原始指针和对delete
的手动调用,而不符合RAII。这在实践中可以很好地工作,因为除了少数例外,大多数QObjects
通常可以很快地将所有权转移到符合raii的容器中,并且因为Qt几乎不会抛出异常。
但是,它确实提供了自己的智能指针,像这样:
http://doc.qt.digia.com/4.6/qscopedpointer.htmlQScopedPointer<Widget> wid(new Widget);
wid->show();
// `wid` will automatically call `delete` when it goes out of scope.
因为你经常需要转移所有权来做一些事情,比如在布局中插入子部件,take
方法在这里变得很方便,它基本上相当于std::unique_ptr
的release
方法。
我建议只使用标准的c++智能指针,如unique_ptr
,在这种情况下,您可以这样做:
unique_ptr<Widget> wid(new Widget);
wid->show();
…但这取决于你是想深入QT还是更接近c++标准的领域。
您可以将mainwindow
设置为父级并打开Qt::Window
标志。