new,delete 操作符

new operator = operator new + 构造函数
delete operator = 析构函数 + operator delete

new operator是由语言内建的,如sizeof一样,不能被改变意义,总是做相同的事。它的动作分为两方面:

  • 分配足够的内存,用来放置某类型的对象。
  • 调用一个constructor,为分配的内存中的对象设定初值。
    这两件事是无法改变的
string *ps = new string("Memory Management");
// 编译器将其转换为类似如下行为
void *memory = operator new(sizeof(string));
call string::string("Memory Management") on *memory;
string *ps = static_cast<string*>(memory);

可以改变的是内存的分配行为。new operator调用函数operator new执行必要的内存分配动作,可以重写或重载该函数,改变其行为。
函数原型:

void* operator new(size_t size)

可以加上额外的参数重载operator new,但第一参数类型必须总是size_t。

有一个特殊版本的operator new称为placement new
使用方式:new (buffer) Widget(widgetSize);
实现类似如下:

void* operator new(size_t, void* location){
	return location;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值