首页 > 代码库 > 深度探索C++对象模型笔记(1)——new和delete运算符

深度探索C++对象模型笔记(1)——new和delete运算符

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 );

 

深度探索C++对象模型笔记(1)——new和delete运算符