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++ 如何避免动态分配小部件中的内存泄漏_C++_Qt_Qwidget - Fatal编程技术网

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

C++ 如何避免动态分配小部件中的内存泄漏,c++,qt,qwidget,C++,Qt,Qwidget,我必须在主窗口中显示widgetA,而不将其作为主窗口的子窗口。因此,如果我动态分配内存空间,它将有泄漏内存的趋势 Widget *wid = new Widget; wid->show(); 我想知道如何处理一个控件的动态内存分配而不泄漏。QT是相当老的C++,所以很多例子只使用原始指针和手动调用到删除< /代码>,不符合RAII。这在实践中可以很好地工作,因为大多数qobject的所有权通常可以很快地转移到符合RAII的容器中,只有少数例外,而且Qt几乎不会抛出异常 但是,它确实提供

我必须在主窗口中显示widgetA,而不将其作为主窗口的子窗口。因此,如果我动态分配内存空间,它将有泄漏内存的趋势

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

我想知道如何处理一个控件的动态内存分配而不泄漏。

QT是相当老的C++,所以很多例子只使用原始指针和手动调用到<代码>删除< /代码>,不符合RAII。这在实践中可以很好地工作,因为大多数

qobject
的所有权通常可以很快地转移到符合RAII的容器中,只有少数例外,而且Qt几乎不会抛出异常

但是,它确实提供了自己的智能指针,如下所示:


。。。但是,你是否想深入QT或更接近C++标准的范围,请将<代码>主窗口< /代码>设置为父函数,打开代码> Qt::Windows 标志。这是“Qt方式”。

一些额外的选项:1)在堆栈上分配2)在小部件上使用
Qt::WA_DeleteOnClose
属性
QScopedPointer<Widget> wid(new Widget);
wid->show();
// `wid` will automatically call `delete` when it goes out of scope.
unique_ptr<Widget> wid(new Widget);
wid->show();