gpt4 book ai didi

c++ - 有利于限制 Qt 对象的范围吗?

转载 作者:太空狗 更新时间:2023-10-29 21:09:00 24 4
gpt4 key购买 nike

new 分配的 Qt 对象几乎已经为您处理好了。事情会在某个时候被清理(几乎总是在父对象被破坏时),因为 Qt 对象有一个很好的父子关系。

所以我的问题是:鉴于某些小部件在应用程序的生命周期内存在,限制某些子小部件的范围是否被认为是好的/有益的?在我看来,如果我不这样做,应用程序可能不会释放这些对象,直到应用程序退出。例如:

MyMainWindow::contextMenu(...) {
QMenu *menu = new QMenu(this);
// ...
menu->exec();
}

对比:

MyMainWindow::contextMenu(...) {
QMenu *menu = new QMenu(this);
// ...
menu->exec();
delete menu;
}

对比:

MyMainWindow::contextMenu(...) {
QScopedPointer<QMenu> menu(new QMenu(this));
// ...
menu->exec();
}

我最喜欢最后一个,我知道该菜单对象将被立即清理,无需添加任何需要担心的代码行。但是,在第一个中,它应该最终 被清理掉。我是否在浪费精力试图管理这些 Qt 小部件的生命周期?我应该完全将其留给 Qt 吗?

最佳答案

在你的第一个例子中,当这个(即 MyMainWindow 对象)是...时,菜单将被删除,这可能不是你想要的,因为这意味着如果 contextMenu() 被调用不止一次,多个看不见的旧 QMenu对象会在内存中堆积,如果用户长时间不关闭/删除 MyMainWindow,最终可能会耗尽大量 RAM。

你的第二个和第三个例子都很好。第三个可能稍微好一点,因为它避免了在没有调用删除的情况下引入错误的任何可能性。

关于c++ - 有利于限制 Qt 对象的范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1975951/

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