《Effective C++》读书笔记之item52:写了placement new也要写placement delete
2012-09-03 21:06
351 查看
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:
如果在类内声明专属的operator new,会遮掩上述版本。一般情况下应当保证这些函数在类外可用,同时应当声明成对的operator new和operator delete。可以声明一个基类包含所有上述函数及其对应的operator delete函数,自己定义类继承这个基类并使用using声明式以取得标准形式,使其与自定义版本不发生命名冲突。
注意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声明式以取得标准形式,使其与自定义版本不发生命名冲突。
相关文章推荐
- 读书笔记 effective c++ Item 52 如果你实现了placement new,你也要实现placement delete
- 【Effective C++】读书笔记 条款52:写了placement new 也要写placement delete
- 《Effective C++》读书笔记之item41:了解隐式接口和编译期多态
- Item 52:写了placement new就要写placement delete
- 《Effective C++》读书笔记之item33:避免遮掩继承而来的名称
- 《Effective C++》读书笔记之item42:了解typename的双重意义
- 《Effective C++》读书笔记之item46:需要类型转换时请为模板定义非成员函数
- 《Effective C++》读书笔记之item34:区分接口继承与实现继承
- 《Effective C++》读书笔记之item38:通过复合塑模出has-a或“根据某物实现出”
- 《Effective C++》读书笔记之item47:请使用traits classes表现类型信息
- 《Effective C++》读书笔记之item55:让自己熟悉Boost
- 《Effective C++》读书笔记之item54:让自己熟悉包括TR1在内的标准程序库
- Effective C++ (3rd Ed) 读书笔记(一)Item 2: Prefer constS, enumS, and inlineS to #defineS
- 《Effective C++》读书笔记之item27:尽量少做转型动作
- 《Effective C++》读书笔记之item36:绝不重新定义继承而来的non-virtual函数
- 《Effective C++》读书笔记之item39:明智而审慎地使用private继承
- 《Effective C++》读书笔记之item48:认识template元编程
- 《Effective C++》读书笔记之item53:不要轻忽编译器的警告
- 《Effective C++》读书笔记之item28:避免返回handles指向对象内部成分
- 《Effective C++》读书笔记之item29:为“异常安全”而努力是值得的