C++面试题总结

本文详细探讨了C++中构造函数与析构函数的调用顺序,特别是涉及派生类和成员对象的情况。同时,文章还介绍了内存分配方式,包括栈、堆、全局/静态区和文字常量区,以及C、C++内存分配的差异,强调了栈与堆在内存管理上的特点和限制。通过对实例的解析,帮助读者理解栈与堆在空间分配和释放上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


未完待续……

1. 构造函数与析构函数的调用顺序

可以简记为:先构造的后析构,后构造的先析构,它相当于一个栈,先进后出。

派生类中含有对象成员时

构造函数执行顺序: 基类 -> 成员对象 -> 派生类,
析构函数执行顺序: 派生类 -> 成员对象 -> 基类

什么时候调用构造函数和析构函数:

  1. 全局范围中定义的对象(即在所有函数之外定义的对象),它的构造函数在文件中的所有函数(包括main函数)执行之前调用。但如果一个程序中有多个文件,而不同的文件中都定义了全局对象,则这些对象的构造函数的执行顺序是不确定的。当main函数执行完毕或调用exit函数时(此时程序终止),调用析构函数。

  2. 局部自动对象(例如在函数中定义对象),则在建立对象时调用其构造函数。如果函数被多次调用,则在每次建立对象时都要调用构造函数。在函数调用结束、对象释放时先调用析构函数。

  3. 在函数中定义静态(static )局部对象,则只在程序第一次调用此函数建立对象时调用构造函数一次,在调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用析构函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值