欢迎查看系列博客:
《深度探索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 (