在扩展QMainWindow时将成员变量存储在堆或堆栈上?

时间:2015-11-12 20:40:27

标签: c++ qt memory-management

我有一个程序(使用Qt用c ++编写),它在窗口中显示图像并进行测量并绘制到图像。所有的Qt教程都使用堆来存储用户界面对象,所以我也做了同样的事情。

当我扩展QMainWindow类时,我添加了许多成员变量,用于存储测量值和不同版本的图像。我没有在堆上显式存储它们(没有new标识符),但我的理解是如果在堆上定义了类,那么它的成员也是如此。

问题:

如果使用new

定义类实例
  1. UI元素应该是指针并用'new'定义,还是应该只是变量并立即使用? (也许是因为UI对象可以与父母一起创建,这使得清理变得容易。)

  2. 如果在上述问题中应为new分配,是否所有成员变量(测量和图像)也应与新用户一起使用然后删除?

  3. 希望我的词汇是正确的。

1 个答案:

答案 0 :(得分:2)

UI对象是动态分配还是驻留在堆栈上并不重要(是的,如果整个对象都是在堆上分配的,那么它的成员也是如此,但同样,它们是否是'是否重新指针 - 另一方面,指针的性能可能更差 - 额外的空间,分配)。

在这两种情况下,您都不必关心资源管理。但是,并非您自己的类型不是从QObject派生而且没有将窗口作为父级。你想要避免使用原始或智能指针,而不需要它们。