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 );
时间: 2024-10-23 21:27:20