《深度探索C++对象模型》(二)C++,new,delete,构造/析构,临时对象

本文深入探讨C++中的对象构造和析构,new和delete运算符的执行期语意,以及临时对象的生命周期和影响。文章指出,即使父类析构函数为虚函数,也可能导致子类对象无法正确析构。new和delete并非总是调用__new运算符,编译器可能会选择vec_new。临时对象的创建和销毁有时依赖于编译器优化,其生命周期在C++标准中有明确规定。

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

欢迎查看系列博客:

《深度探索C++对象模型》(一)对象模型、存储形式;默认构造函数一定会构造么
《深度探索C++对象模型》(二)C++,new,delete,构造/析构,临时对象(本篇)
《深度探索C++对象模型》(三)构造函数、拷贝构造和初始化列表

--------------------------------------------------------------------------------------------------------------

即使父类的析构函数设置为虚函数,那么当父类指针指向子类对象的时候,也有不能够正确析构的情况。比如

Point* ptr = new Point3d[10];

六、执行期语意学

本章三个知识点比较重要:

1. 对象的构造和析构

2. new和delete运算符 

3. 临时变量。

第一、构造和析构函数

---》C++支持栈上的对象,所以栈上的变量的constructor和destructor的安插就要注意了,比如swith-case语句,在每个case的后面都要进行constructor或者destructor

---》全局变量,局部静态变量和对象数组。(p250)

    对象数组的初始化。例如后面的声明 Point knots[10];如果Point没有constructor和destructor,我们只需要在内存开辟10*Point个大小的空间即可,如果Point有constructor或者destructor那么,这个cosntructor和destructor必须轮流实施与每一个元素之上,这个工作是由runtime library函数完成。cfront中使用vec_new()函数产生出以class object构造而成的数组,下面是vec_new的原型:

    void* vec_new (
         
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值