在主程序上:
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类的析构函数?
答案 0 :(得分:2)
您提出的问题标题和示例完全匹配。
您的函数在堆栈上分配类实例colA
和colB
。
在分配之后,调用Collage
的构造函数,在堆上分配png
。
当函数onStack()
终止时,它会调用Collage
的析构函数,因为colA
和colB
已超出范围。该析构函数又将png
从堆中释放出来。
最后,释放onStack
的堆栈框架,其中包含colA
和colB
的内存。
因此,您的示例中分配的所有内容都将被正确释放。