在主程序上:
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类的析构函数吗?
最佳答案
您的问题标题和给出的示例不完全匹配。
您的函数在堆栈 上分配类实例colA
和colB
。
分配之后,Collage
的构造函数被调用,它在堆 上分配png
。
当函数 onStack()
终止时,它会调用 Collage
的析构函数,因为 colA
和 colB
已经超出范围。该析构函数依次从堆中释放 png
。
最后,onStack
的栈帧,包括colA
和colB
的内存,被释放。
因此在您的示例中分配的所有内容都将被正确释放。
关于c++ - 当函数调用退出并且函数在堆中生成类实例时,是否调用了析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28102958/