ITEM8理解不同含义的NEW和DELETE

理解不同含义的NEW和DELETE

原则:可以改变New的实现方式,但是改变不了New要实现什么。
分类:

a. new /new[] (new operator);
b. operator new/operator new[]
c. placement new

区别
  1. new operator
    new operator是语言内置的,不可改变;
    new operator的实现分两步:a. 调用operator new来分配内存(raw); b. 调用对象的构造函数,在a分配的内存上构建对象并返回对象指针。
    想在堆上建立对象必须使用new operator;
  2. operator new
void * operator new(size_t size);

operator new函数可以被重载,但第一个参数必须是size_t。重载operator new后,将影响new operator;
3. placement new
placement new 在已经存在的内存上建立对象

void * operator new(size_t, void *location)
{
return location;
}

class Widget {
public:
Widget(int widgetSize);
...
};

Widget * constructWidgetInBuffer(void *buffer,
int widgetSize) {
return new (buffer) Widget(widgetSize);
}

new 和 delete 操作符是内置的,其行为不受你的控制,凡是它们调用的内存分配和释
放函数则可以控制。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值