当函数调用退出且函数在堆中生成类实例时调用析构函数

Is destructor invoked when the function call quits and the function generated class instances in heap?

本文关键字:实例 析构函数 调用 退出 函数调用 函数      更新时间:2023-10-16

在主程序上:

void onStack()
{
    Collage colA(24);
    Collage colB(12);
}

和拼贴构造函数/析构函数:

Collage::Collage(size_tnumPics)
{
    pics = new PNG[numPics];
}
Collage::~Collage()
{
    delete[] pics;
}

假设 PNG 类的定义正确。

当调用 onStack() 函数时,当 onStack() 退出时会调用 Collage 类的析构函数吗?

您的问题标题和给出的示例并不完全匹配。

您的函数在堆栈上分配colAcolB类实例。

在该分配之后,调用Collage 的构造函数,该构造函数在上分配png

当函数onStack()终止时,它会调用Collage 的析构函数,因为colAcolB已经超出了范围。该析构函数反过来将png从堆中释放出来。

最后,onStack的堆栈帧,包括colAcolB的内存,被释放出来。

因此,您的示例中分配的所有内容都将被正确释放。

相关文章: