《Effective C++》读书笔记之item52:写了placement new也要写placement delete

1.当在类中声明了一个placement new(一个特定位置上的new),它接受了除std::size_t外的其他变量作为参数,则必须同样声明一个placement delete并且其参数与placement new相同以取得对应关系,这样当内存分配失败时C++编译器将调用与placement new相匹配的placement delete归还内存。

注意placement delete只有在“伴随placement new调用而触发的构造函数”出现异常时才会被调用,对一个已经存在的指针进行delete时不会调用它。

2.应当避免class专属的new掩盖客户期望的其他new,如通用版本的new或其基类中的new,方法是在适当的作用域中使用using声明式。

缺省情况下C++在global作用域中提供以下三种形式的operator new:

void* operator new(std::size_t) throw(std::bad_alloc);	//normal new
void* operator new(std::size_t, void*) throw();	//placement new
void* operator new(std::size_t, const std::nothrow_t&) throw();	//nothrow new

如果在类内声明专属的operator new,会遮掩上述版本。一般情况下应当保证这些函数在类外可用,同时应当声明成对的operator new和operator delete。可以声明一个基类包含所有上述函数及其对应的operator delete函数,自己定义类继承这个基类并使用using声明式以取得标准形式,使其与自定义版本不发生命名冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值