当函数调用退出并且函数在堆中生成类实例时,是否会调用析构函数?

时间:2015-01-23 04:17:01

标签: c++ class oop

在主程序上:

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

和Collage构造函数/析构函数:

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

Collage::~Collage()
{
    delete[] pics;
}

假设PNG类已正确定义。

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

1 个答案:

答案 0 :(得分:2)

您提出的问题标题和示例完全匹配。

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

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

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

最后,释放onStack的堆栈框架,其中包含colAcolB的内存。

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