我对Qt编程有一些澄清。 在Qt中,大多数时候我们通过动态分配内存来实例化widget。
从Qt的角度来看,这样做有什么好处吗?那么为小部件取消内存分配呢?我们是否需要为分配的内存或Qt句柄手动调用delete?实施例
QListView *newlist = new QListView(); //This is good? if so why?
QListView newlist; // why not this?
答案 0 :(得分:3)
看起来堆栈分配是安全的。见this answer。但就Symbian而言,它可能会有所不同。 This question提出了一些好处。
我认为使用Symbian,你有一个有限的堆栈空间,并且许多对象本身都使用在堆上分配的数据共享。在这方面,动态地继续这样做可能是一个好主意。
答案 1 :(得分:3)
QListView* newlist = new QListView(); //This is good? if so why?
仅当您将newlist
指针存储在某处并稍后手动将其删除时。
如果可能的话,我建议在堆栈上分配你的小部件。但是,当使用我即将解释的技术时,这是不可能的。
在设计复杂的小部件时,通常会创建object tree个小部件。这意味着每个小部件(根小部件除外)都有父级。删除父项后,它将自动删除其所有子项。这种方法非常方便,因为您只需要跟踪根小部件。
在你的情况下,你会做这样的事情:
QListView* newlist = new QListView(parentWidget);
答案 2 :(得分:3)
请参阅我的my reply有关QObjects的信息。 简而言之:一个人在堆上创建小部件,因为它们通常必须在当前方法中存活,并且不能分配或复制它们。 QWidgets在删除子项时会删除它们的子项(或者更常见的是,QObjects会删除它们的子项),因此如果将父项传递给窗口小部件,通常不存在内存管理问题。