【发布时间】:2019-09-13 01:39:28
【问题描述】:
我试图了解 Qt 如何处理其小部件的实例化对象,这些小部件在用户定义的类中使用动态内存分配。
在下面您可以看到 main.cpp 和来自 Qt 安装示例项目的用户定义类“Foo”的一部分。
作为一个新手,我知道每当我们分配动态内存时,我们都必须在代码中的某处看到delete。问题是delete 在哪里删除在 Foo.cpp 在下面一行?QChartView *mychart= new QChartView();
main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
Foo *myobj = new Foo();
window.setCentralWidget(myobj);
window.resize(900, 600);
window.show();
return a.exec();
}
Foo.cpp
Foo::Foo(QWidget *parent) :
QWidget(parent)
{
QChartView *mychart= new QChartView();
...
【问题讨论】:
-
不清楚这里的“句柄”是什么意思。您在 Foo.cpp 中编写了该代码,因此程序员执行(处理)了动态分配。请更具体地解释您的疑惑。
-
每当我们分配动态内存时,我们必须确保在代码中的某处删除该内存,句柄是指这个概念。但在 Qt 附带的示例项目中,我看不到任何
delete mychart代码。所以我假设 Qt 正在处理此类删除,对吗? -
这取决于你用 QChartView 做什么——例如如果您将其添加到另一个小部件,则该小部件会对其负责(请参阅stackoverflow.com/questions/2491707/memory-management-in-qt),但至少要使用您在评论中写的内容更新您的问题,因为这就是您的问题的实际意义。
-
问题已更新
标签: c++ qt inheritance