当函数调用退出且函数在堆中生成类实例时调用析构函数
Is destructor invoked when the function call quits and the function generated class instances in heap?
在主程序上:
void onStack()
{
Collage colA(24);
Collage colB(12);
}
和拼贴构造函数/析构函数:
Collage::Collage(size_tnumPics)
{
pics = new PNG[numPics];
}
Collage::~Collage()
{
delete[] pics;
}
假设 PNG 类的定义正确。
当调用 onStack() 函数时,当 onStack() 退出时会调用 Collage 类的析构函数吗?
您的问题标题和给出的示例并不完全匹配。
您的函数在堆栈上分配colA
和colB
类实例。
在该分配之后,调用Collage
的构造函数,该构造函数在堆上分配png
。
当函数onStack()
终止时,它会调用Collage
的析构函数,因为colA
和colB
已经超出了范围。该析构函数反过来将png
从堆中释放出来。
最后,onStack
的堆栈帧,包括colA
和colB
的内存,被释放出来。
因此,您的示例中分配的所有内容都将被正确释放。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 什么时候调用析构函数
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 如何析构单例实例,或者为什么以下代码适用于析构函数?
- 如何强制调用类的全局实例的析构函数和构造函数(以便"re-init"类实例)
- 是否可以实例化具有已删除构造函数和析构函数的非聚合类?
- 析构函数在 lambda 捕获说明符中声明的类实例上运行两次
- 当调用析构函数时,是否可以将指向类实例的指针设置为nullptr
- 为什么 c++ 实例在通过 Objective-c 类调用时会自动调用构造函数和析构函数?
- 是否可以在另一个类的实例中显式调用对象的析构函数?
- 创建'new'实例可以解决析构函数崩溃问题?
- 当函数调用退出且函数在堆中生成类实例时调用析构函数
- 是否可以在构造函数之前调用C++对象实例的析构函数?如果是这样,如何?
- 为什么noexcept构造函数需要析构函数的实例化
- 为什么我的课'当我向向量添加实例时,会调用s析构函数
- 当类的指针实例超出范围时不调用析构函数是真的吗?
- 为什么带有用户定义析构函数的类的实例将成员指针设置为零
- 是否在释放或析构函数中删除com对象的实例数据?