- int *pi = new int(5);
new 操作实际上由两步组成:
(1)通过适当的 new 运算符函数实体,配置所需的内存。
// 调用函数库中的 new 运算符。
- int *pi = new = __new( sizeof( int ) );
(2)给配置得来的对象设立初值。
- *p = 5;
初始化应该在内存配置成功(经由 new 运算符)后才执行。
- 1 int *pi;
- 2
- 3 if( pi = __new( sizeof(int) ) )
- 4
- 5 *pi = 5; //分两步
类似地;
- delete pi;
- if( pi != 0)
- __delete( pi );
注意 pi 并不会自动被清 0(NULL)。
所以后面如果有如下操作:
- if( pi && *pi = 5 )
- {
- //.........
- }
将是合法的(但无法预测后果的)。
delete 会结束 pi 指向的对象的生命,所以后面不应该再去处理这部分内存。
当 new 操作的是一个类时:
- Point3d *origin = new Point3d;
被转换为:
- Point3d *origin;
- //伪码
- if(origin = __new ( sizeof( Point3d ) ) )
- origin = Point3d::Point3d( origin );
来源: http://www.bubuko.com/infodetail-2011383.html