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

标签 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类的析构函数吗?

最佳答案

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

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

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

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

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

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

关于c++ - 当函数调用退出并且函数在堆中生成类实例时,是否调用了析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28102958/

相关文章:

c++ - 调试断言失败! (字符串下标超出范围)

Python 迭代二维数组 __iter__

c# - 什么应该进入顶级命名空间?

Java 泛型类型利用

c++ - std::max_element 编译错误,C++

c++ - 在 C++ 中,是否可以实现推进使 "current"元素无效的迭代器接口(interface)?

c++ - 从 weak_ptr 列表中删除项目

C++类继承问题

具有参数和比较的 C++ 类

php - select count() 查询中的 limit 子句未按我的预期工作