gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:22 26 4
gpt4 key购买 nike

我必须在 mainwindow 中显示 widgetA 而不是将其作为 mainwindow 的子项。所以如果我动态分配内存空间,就会有内存泄漏的趋势

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

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

最佳答案

QT 是相当老派的 C++,因此它的许多示例仅使用原始指针和手动调用 delete 而不符合 RAII。这在实践中可以很好地工作,因为大多数 QObjects 通常可以很快将所有权转移到符合 RAII 的容器,除了少数异常(exception),因为 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 方法std::unique_ptr

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

unique_ptr<Widget> wid(new Widget);
wid->show();

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

关于c++ - 如何避免动态分配的小部件中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30426187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com