Effective C++ --8 定制new和delete && 9杂谈讨论
来源:互联网 发布:mt管理器源码 编辑:程序博客网 时间:2024/05/15 03:53
上一篇Effective C++ --7 模板与泛型编程
Effective C++ --8定制new和delete
49、了解new-handler的行为
(1)set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被满足。Operate new确保在分配class对象内存的过程中以class专属之new_handler替换global new-handler。
(2)Nothrow new是一个颇为局限的工具,因为它只适用于内存分配,后续的构造函数调用还是可能抛出异常。
50、了解new和delete的合理替换时机
(1)替换编译器所提供的operator new和operator delete的理由:用来检测运用上的错误、为了强化效能、为了收集使用上的统计数据。
51、编写new和delete时需固守常规
(1)operator new应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用new_handler。它也应该有能力处理0bytes申请,通常将0byte申请视为1byte。Class专属版本则还应该处理“比正确大小更大的(错误)申请”。
(2)operator delete应该在收到null指针时不做任何事情。Class专属版本则还应该处理“比正确大小更大的(错误)申请”。
52、写了placement new也要写placement delete
(1)placement new是指非正常形式附带参数的operator new,operator new接受的参数除了一定会有的那个size_t之外还有别的参数。正常的operator new函数为 void* operator new(std::size_t)throw(std::bad_alloc);
(2)当写了一个placement operator new时,要确定也写出了对应的placement delete。如果没有那么做,程序可能会发生隐微而时断时续的内存泄露。如果没有声明对应的placement operator delete,运行期系统不知道如何取消并恢复原先对placement new的调用,这样就会造成内存泄露。Placement delete只有在伴随placement new调用而触发的构造函数出现异常时才会被调用,平时不会调用。
(3)当声明placement new和placement delete时,确定不要无意识地遮掩了正常版本。如果在class内声明任何operator new,就会遮掩所有operator new、placement new和nothrow new。
Effective C++ --9杂谈讨论
53、不要轻忽编译器的警告
(1)严肃对待编译器发出的警告信息。努力在编译器最高警告级别下争取“无任何警告”的荣誉。
(2)不要过度依赖编译器的报警能力,因为不同的编译器对待事物的态度并不相同。一旦移植到另一个编译器上,原本依赖的警告信息有可能消失。
54、让自己熟悉包括TR1在内的标准程序库
(1)C++标准程序库的主要机能由STL、iostreams、locales(multiple active locales,多区域)组成。并包含C99标准库。
(2)TR1添加了智能指针(tr1::shared_ptr)、一般化函数指针(tr1::function)、hash-based容器、正则表达式(regular expression)以及另外10个组件的支持。
(3)TR1自身只是一份规范,为获得TR1提供的好处,需要一份实物。一个好的实物来源是Boost。
55、让自己熟悉Boost
(1)Boost在标准化过程中扮演深具影响力的角色,提供许多TR1组件实现品,以及许多程序库。
- Effective C++ --8 定制new和delete && 9杂谈讨论
- Effective C++(八)定制new和delete
- effective C++: 8.定制new和delete
- Effective C++(八)定制new和delete
- 《Effective C++》定制new和delete
- <<Effective C++>>读书笔记8: 定制new和delete
- (Effective C++)第八章 定制new和delete(Customizing new and delete)
- Effective C++读书笔记---定制new和delete
- Effective C++ 8. 定制 new 和 delete
- [C++]定制new和delete
- 如何写出高效C++(定制new和delete和杂项讨论)
- C++(8)定制new和delete
- effective C++读书笔记八 —— 定制new 和delete
- Effective C++读书笔记 第八部分 定制new和delete
- Effective C++ 第八章(定制new和delete)
- Effective C++ 笔记 第八部分 定制new和delete
- Effective C++笔记(11)—定制new和delete
- More Effective C++:不同new和delete
- strongly-typed language(强类型语言)
- Excel-算术平均分析(差异分析)
- 《现代操作系统》精读与思考笔记 第七章 多媒体
- iPhone发短信 MFMessageComposeViewController
- CSS Hank兼容浏览器的
- Effective C++ --8 定制new和delete && 9杂谈讨论
- net Winform socket 套接字聊天室客户端和服务端 源码
- 一篇很老很老的文章:Web 3.0 定義,北美兩大創投天王的 SoLoMo vs. SoMoCloGlo
- Linux进程间通信——使用匿名管道
- TINY6410 按键驱动分析
- FreeMarker页面中获得contextPath
- iOS开发之调用邮件发送
- Javascript获取不重复的随机数值
- 查看android手机的IP