C++ 在返回按钮或关闭应用程序时调用析构函数?
我用Qt构建了一个应用程序。它包括一些屏幕,其中一些屏幕是动态分配的。 我正在考虑是在onBackButton()上删除动态分配的对象,还是只在Maker的析构函数中删除 事情是这样的: 如果在onBackButton()中删除它们,这将节省内存,因为只要不显示屏幕,内存就不会被使用。但是,这意味着如果我们在其中一个屏幕上关闭应用程序,内存将不会被释放 另一方面,如果我们在Maker的析构函数上删除它们,那么当应用程序存在时,内存将被释放。但即使我们不在那个屏幕上,内存仍将被使用(如果我们进入这样一个屏幕,然后按下后退,内存仍将被使用) 当然,我们不能在两个位置都删除。这将抛出异常 我选择了第一个选项,因为“关闭(存在)”应用程序的唯一方法是实际按下设备上的电源按钮,这将关闭设备。 所以不会造成伤害-下次我们打开设备时,一切都会好起来的 我的方法正确吗?或者有更好的方法吗?对于C++ 在返回按钮或关闭应用程序时调用析构函数?,c++,qt,memory-management,C++,Qt,Memory Management,我用Qt构建了一个应用程序。它包括一些屏幕,其中一些屏幕是动态分配的。 我正在考虑是在onBackButton()上删除动态分配的对象,还是只在Maker的析构函数中删除 事情是这样的: 如果在onBackButton()中删除它们,这将节省内存,因为只要不显示屏幕,内存就不会被使用。但是,这意味着如果我们在其中一个屏幕上关闭应用程序,内存将不会被释放 另一方面,如果我们在Maker的析构函数上删除它们,那么当应用程序存在时,内存将被释放。但即使我们不在那个屏幕上,内存仍将被使用(如果我们进入这
QObject
(和子类),您可能应该使用(即调用)插槽
当控件返回到事件循环时,对象将被删除
对于QObject
(和子类),您可能应该使用(即调用)插槽
当控件返回到事件循环时,对象将被删除
好的,如果您的应用程序是该设备上唯一运行的东西,那么正如您所提到的,在应用程序关闭时,设备将关闭,所以没有问题 但作为更好的实践,我认为您可以使用Qt的内存清理系统。它的工作原理是这样的,QObject的任何实例都会在自己删除时删除其所有子QObject。因此,您只需要设置windows的父级,并将此父级层次结构的顶部设置为QApp实例。用这种方法,它们中的每一个都会被正确地销毁 此外,您当然可以在多个位置删除对象,只要将指针设置为
nullptr
,以便下次删除不会引发任何异常
但是更好的方法是使用QPointer
来保存指针,这样每当删除对象时指针都将为空
另一种方法可能是使用新的c++11
std::shared_ptr
,但您必须发布一些代码来更好地说明您的情况 好吧,如果您的应用程序是该设备上唯一运行的东西,那么正如您所提到的,在应用程序关闭时,设备将关闭,因此没有问题
但作为更好的实践,我认为您可以使用Qt的内存清理系统。它的工作原理是这样的,QObject的任何实例都会在自己删除时删除其所有子QObject。因此,您只需要设置windows的父级,并将此父级层次结构的顶部设置为QApp实例。用这种方法,它们中的每一个都会被正确地销毁
此外,您当然可以在多个位置删除对象,只要将指针设置为nullptr
,以便下次删除不会引发任何异常
但是更好的方法是使用QPointer
来保存指针,这样每当删除对象时指针都将为空
另一种方法可能是使用新的c++11
std::shared_ptr
,但您必须发布一些代码来更好地说明您的情况 我想他说的是在哪里调用delete或deleteLater()函数。因此,他删除对象的方式没有任何区别。因为下一次很可能发生在当前事件循环之后。我想他说的是在哪里调用delete或deleteLater()函数。因此,他删除对象的方式没有任何区别。因为下一次最有可能发生在当前事件循环之后。