new和delete表达式

1.系统为每个程序都提供了一个在程序执行时可用的内存池.这个可用内存池被称为程序的空闲存储区(free store)或堆(heap) 

  运行时刻的内存分配被称为动态内存分配(dynamic memory allocation).

 new表达式返回指向新分配的对象的指针.int *pi = new int;

从空闲存储区中分配了一个int型的对象,并且它的地址初始化pi.在空闲存储区内实际分配的对象并没有被初始化.

int *pi = new int(1024);它不但分配了这个对象而且用1024将其初始化.

string *psa = new string[10];

从空闲存储区分配了一个含有10个string 类对象的数组,用它的地址初始化psa,然后依次在每个元素上调用string类的缺省构造函数.

所有从空闲存储区分配的对象都是未命名的,这是它的另一个特点.new表达式并不返回实际被分配的对象,而且返回这个对象的地址.对象的所有操作都通过这个地址间接来完成.

当对象完成了使命时,我们必须显式地把对象的内存返还给空闲存储区.

1.系统为每个程序都提供了一个在程序执行时可用的内存池.这个可用内存池被称为程序的空闲存储区(free store)或堆(heap) 

  运行时刻的内存分配被称为动态内存分配(dynamic memory allocation).

 new表达式返回指向新分配的对象的指针.int *pi = new int;

从空闲存储区中分配了一个int型的对象,并且它的地址初始化pi.在空闲存储区内实际分配的对象并没有被初始化.

int *pi = new int(1024);它不但分配了这个对象而且用1024将其初始化.

string *psa = new string[10];

从空闲存储区分配了一个含有10个string 类对象的数组,用它的地址初始化psa,然后依次在每个元素上调用string类的缺省构造函数.

所有从空闲存储区分配的对象都是未命名的,这是它的另一个特点.new表达式并不返回实际被分配的对象,而且返回这个对象的地址.对象的所有操作都通过这个地址间接来完成.

当对象完成了使命时,我们必须显式地把对象的内存返还给空闲存储区.

2.显式转换:

   也被叫做强制转换(cast)包括下列命名的强制类型转换操作符:

static_cast,dynamic_cast,const_cast,reinterpret_cast.

void*型的指针被称为泛型(generic)指针,因为它可以指向任意数据类型的指针.void*型指针不能直接被解除引用,因为没能类型信息可用来指导编译器怎样解释底层的位模式.相反,void*的指针必须先被转换成某种特定类型的指针.

在C++中不存在从void*型指针到特殊类型的指针之间的自动转换.例如:

int ival; int *pi =0;

char *pc =0;

void *pv;

pv = pi;pv=pc;//隐式转换

显式转换符号的一般形式如下:

cast-name<type> (expression);

cast-name is static_cast,const_cast,dynamic_cast,reinterpret_cast

reinterpret_cast通常对于操作数的位模式执行一个比较低层次的重新解释,它的正确性很大程序上依赖于程序员的主动管理.

用reinterpret_cast操作符来执行并标识出所有的显式指针强制转换是很有用的.

dynamic_cast支持在运行时刻识别由指针或引用指向的类对象.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值