1. 非原子操作
这些非原子操作在被编译为汇编代码后不止一条指令。
- 自加、自减少;
new 关键字;
- 申请内存;
- 调用构造函数;
pInst = new T; // 对于这样一个赋值语句,更是包含了如下: // 1. 申请内存空间; // 2. 在内存的位置上调用构造函数; // 3. 将内存的地址赋值给 pInst
2. 指令顺序
pInst = new T;
这样的一个操作,包含的三个步骤,(2)和(3)的顺序是可以颠倒的,但内存空间的申请必须是第一步。
这些非原子操作在被编译为汇编代码后不止一条指令。
new 关键字;
pInst = new T;
// 对于这样一个赋值语句,更是包含了如下:
// 1. 申请内存空间;
// 2. 在内存的位置上调用构造函数;
// 3. 将内存的地址赋值给 pInst
pInst = new T;
这样的一个操作,包含的三个步骤,(2)和(3)的顺序是可以颠倒的,但内存空间的申请必须是第一步。