[温故而知新] 《深度探索c++对象模型》——运行期语意

这张东西有点少,就写6条…

[温故而知新] 《深度探索c++对象模型》——运行期语意_第1张图片

1. copy assignment operator在虚拟继承情况下行为不佳,有可能多次调用,比如说在一个菱形结构中。

2. 数组的定义,每个数组里的元素的构造和析构也跟之前的一样需要进行。数组里的元素按默认构造进行初始化。

3. new操作符

int *pi = new int(5);

//分两步进行
int *pi;
if( pi = __new(sizeof(int)) ){
    *pi = 5;//成功了才初始化
}

4. Placement Operator new

Point p;
Point *p1 = new (&p) Point;//构造函数会调用
......
p1->~Point();  //需要手动调用析构,这里如果改为delete p1的话,是会释放内存的,书中所说的c++标准修正了这个问题,但至少我的编译环境c++11还没修正。

Point *p2 = new (&p) Point;//构造函数会调用

5. 数组的删除

Point *ptr = new Point3d[10];//base class 指针,指向derived class的数组
//尽量别这么干,否则直接 delete[] ptr;是有问题的
//非要这么干,在删除的时候,就得一个一个强制转换后再delete

6.临时性对象

临时性对象在完整表达式尚未评估完全之前,不得被摧毁。

你可能感兴趣的:(C++)