effective c++ 04 --设计与声明
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了effective c++ 04 --设计与声明,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2348字,纯文字阅读大概需要4分钟。
内容图文
![effective c++ 04 --设计与声明](/upload/InfoBanner/zyjiaocheng/614/8975797987b54b6c84d60d0616282163.jpg)
东阳的学习记录
条款18:让接口容易被正确使用、不易被误用
- 接口设计要清晰无歧义,能让用户知晓每一个参数的含义以及使用目的、方法
- “促进正确使用” 的方法包括接口的一致性,以及与内置类型的行为兼容
- “阻止误用” 的方法有:
i 建立新类型、限制类型上的操作
ii 束缚对象值
iii 消除客户的资源管理责任 - shared_ptr 支持定制型删除器。这可防范DDL问题,可被用来自动解除互斥锁等等
条款19:设计 class 犹如设计 type
- 新 type 如何创建和销毁?
- 对象的初始化和复制有何区别?
- 新 type 对象如果被 pass-by-value, 意味着什么?
- 什么是 type 的合法值?
- 你的新 type 需要配合某个继承图系吗?
- 你的新 type 需要什么样的类型转换?
- 什么样的操作符和函数对于新 type 是合理的?
- 什么样的标准函数应该被驳回?(那正是你必须声明为 private 者)
- 谁该取用新 type 的成员?
- 新 type 有多么一般化?、
- 你真的需要一个新 type 吗?
条款20:以 const & 传递参数 代替 value
- 以 const & 传递可以回避构造析构成本。
- 以const & 传递参数可以防止对象被切割。若以值传递,将会使得派生类中属于派生类独有的那一部分被阉割
- 对于内置类型,STL的迭代器和函数对象使用值传递更加高效
条款21:必须返回对象时,不要妄想返回其引用
- 不要返回局部栈对象的引用,否则会造成空悬指针
- 返回堆对象的引用也是一个坏主意
记住:
永远不要返回局部对象的引用或指针, 永远不要返回堆对象的引用, 永远不要返回指针或引用指向一个 local static 对象而有可能同事需要多个这样的对象。
条款22:将成员变量声明为private
- 通过函数统一控制,能够实施精准的访问控制
- 方便以后更改代码以及维护
- 可用计算替代保存值,视实际情况选择
- 就封装性来说,protected与public一样
- 封装性与“当其内容改变时可能造成的代码破坏量成反比”
条款23:宁以 non-member、non-friend替换member函数
- 使用非成员函数,能降低编译依存度,带来更大的封装性
- 我们使用封装的原因,使我们的改变影响更少的人
- 非成员函数提供更大的封装性,因为其不可访问 private 成员
- 将不同功能置于多个头文件中
条款24:若所有参数皆需类型转换,请采用 non-member 函数
- 任何时候,能避免使用 friend 函数就应该避免
- 如果你需要对所有的参数(包括 this 所指的隐喻参数)进行类型转换,那么这个函数必须是非成员函数。
条款25:考虑写出一个不抛异常的swap函数
- 如果你希望你的软件有预期的效果,不要往std命名空间添加任何东西
记住:
- 当std::swap对你的类型效率不高时,提供一个swap成员函数并确保这个函数不抛异常
- 如果你提供了一个成员的swap,就应该提供一个 non-member swap 用来调用前者,对于class(而不是模板),请特化 std::swap
- 调用第二步中的swap时,使用using std::swap将 std空间中的swap添加到作用域中
- 为 “用户定义类型“ 进行 std templates 全特化是好的,但是千万不要在 std 中加入任何全新的东西
内容总结
以上是互联网集市为您收集整理的effective c++ 04 --设计与声明全部内容,希望文章能够帮你解决effective c++ 04 --设计与声明所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】