码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-06 11:02:30      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:转换   成功   ...   注意   logs   函数   实体   内存配置   new   

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运算符

标签:转换   成功   ...   注意   logs   函数   实体   内存配置   new   

原文地址:http://www.cnblogs.com/liuyubin233/p/6672441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!