Effective C++ 条款18 让接口容易被正确使用,不易被误用
2015-08-23 16:34
411 查看
1. 好的借口很容易被正确使用,不易被误用.
2. "促进正确使用"的方法包括借口的一致性(例如STL容器用于统计大小的函数都名为size)以及与内置类型的行为兼容(例如重载*返回的值应加const限定以防被篡改).
3. 阻止误用的办法包括建立新类型,限制类型上的操作,束缚对象值(使用枚举,static 成员函数返回特定对象),以及消除客户的资源管理责任(用智能指针替代原始指针做参数和返回值)
4. shared_ptr支持定制性删除器(custom deleter),这可防范DLL问题("对象在动态链接库(DLL)被new创建,却在另一个DLLL内被delete销毁"),因为它缺省的delete是来自"shared_ptr"诞生所在的那个DLL的delete.最常见的shared_ptr实现品来自boost,boost的shared_ptr是原始指针的两倍大,以动态分配内存作为簿记用途和"删除器之专属数据",以virtual形式调用删除器,并在多线程程序修改引用次数时蒙受线程同步化(thread synchronization)的额外开销(只要定义一个预处理器符号就可以关闭多线程支持).总之,他比原始指针大且慢,而且使用辅助动态内存,但额外的执行成本却并不显著,"降低客户错误"的成效却是每个人都看得到.
2. "促进正确使用"的方法包括借口的一致性(例如STL容器用于统计大小的函数都名为size)以及与内置类型的行为兼容(例如重载*返回的值应加const限定以防被篡改).
3. 阻止误用的办法包括建立新类型,限制类型上的操作,束缚对象值(使用枚举,static 成员函数返回特定对象),以及消除客户的资源管理责任(用智能指针替代原始指针做参数和返回值)
4. shared_ptr支持定制性删除器(custom deleter),这可防范DLL问题("对象在动态链接库(DLL)被new创建,却在另一个DLLL内被delete销毁"),因为它缺省的delete是来自"shared_ptr"诞生所在的那个DLL的delete.最常见的shared_ptr实现品来自boost,boost的shared_ptr是原始指针的两倍大,以动态分配内存作为簿记用途和"删除器之专属数据",以virtual形式调用删除器,并在多线程程序修改引用次数时蒙受线程同步化(thread synchronization)的额外开销(只要定义一个预处理器符号就可以关闭多线程支持).总之,他比原始指针大且慢,而且使用辅助动态内存,但额外的执行成本却并不显著,"降低客户错误"的成效却是每个人都看得到.
相关文章推荐
- [LeetCode] Merge Intervals
- 浅谈C++设计模式之抽象工厂(Abstract Factory)
- C++:构造函数和析构函数能否为虚函数
- C++类中的const和static
- C++中数字与字符串之间的转换
- 关于C语言中函数调用和参数传递机制的探讨
- STM32标准外设库学习笔记-20150823-阅读stm32f10x.h
- C++入门和提高书籍
- c++(重载、覆盖、隐藏)
- C/C++中typedef 用法
- 黑马程序员-----------C语言基础-----------指针(二)
- c++中静态成员变量要在类外部再定义,否则产生link2001错误
- Effective C++ 条款17 以独立语句将newed对象置入智能指针
- [C/C++]_[初级]_[如何编写简单有效代码,提高程序运行效率和性能]
- 出入栈顺序可能性
- c语言获取符号位整数和浮点
- 【七】C++一些新的关键字 -- new、delete、强制类型转换
- 黑马程序员——C语言内存管理
- C语言 位操作
- 2016阿里巴巴c/c++研发工程师在线笔试题(附加题)(题目写的很乱,纯属碎片)