new操作符(new operator) 和 new 操作(operator new)和new[]

new操作符(new operator) 和 new 操作(operator new)和operator new[]


new操作符,完成功能的行为分两部分:

1.先分配对象所占用的内存。

2.再调用构造函数初始化内存里的对象。


不能以任何形式改变new操作符的行为,但能改变其如何分配内存,new操作符调用operator new()

函数内存分配,可重写此函数改变其行为。

eg:    int *a = new int(100);

void* operator new(size_t sz);//参数类型size_t决定分配多少内存,sz = sizeof(size_t),并返回一个未经过处理的指针指向未初始化的内存,再调用构造函数,初始化内存。上例则分配int类型大小4个字节,内存初始化为100.

可对operator new(size_t sz)函数进行重写,改变其分配内存空间的大小。假设分配大小为9 的字节:

eg:    void* operator new(size_t sz)

{

return (void*)malloc(sz+5);

}


但直接调用operator new函数时,例如 void * p = operator new (4);

//此函数即如同malloc函数一样,只分配了4个内存大小的空间,返回一个未经处理的指针,对构造函数全然不知。所以说 operator new()只是内存分配函数



int *a = new int[100];

用void* operator new[](size_t sz);//分配sz=sizeof(size_t)*100大小内存,返回一个未经处理的指针指向未初始化的内存。不调构造函数,不初始化内存。申请内存时会多申请4字节空间存放分配单元的个数。

可对operator new[](size_t sz)函数进行重写控制分配内存空间的大小。

用delete[]进行释放,释放时根据4字节空间里存放的个数进行依次释放。也可对operator delete()进行重载,定制删除器。

int *a = new int[100]( );//对申请单元空间进行初始化,默认初始化为0,。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值