首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当函数调用退出并在堆中生成类实例时,是否调用析构函数?

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

Stack Overflow用户
提问于 2015-01-23 04:17:00
回答 1查看 42关注 0票数 0

在主程序上:

代码语言:javascript
复制
void onStack()
{
    Collage colA(24);
    Collage colB(12);
}

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

代码语言:javascript
复制
Collage::Collage(size_tnumPics)
{
    pics = new PNG[numPics];
}

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

假设PNG类是适当定义的。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-23 04:29:40

你的题目和给出的例子不完全相符。

您的函数在colA堆栈上分配类实例和colB

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

当函数onStack()终止时,它调用Collage的析构函数,因为colAcolB已经超出了作用域,而这个析构函数又将png从堆中释放出来。

最后,释放了onStack的栈帧,其中包括colAcolB的内存。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28102958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档