Effective C++ 4
来源:互联网 发布:windows原理与应用 编辑:程序博客网 时间:2024/05/19 01:07
namespace std{template<class T>void swap(T&a,T&b){T temp(a);a=b;b=temp;}}//T支持copying函数即可。//pimpl手法:以指针指向一个对象,内含真正数据。//在namespace std中只能全特化,不能偏特化,//如namspace std{template<> void swap<A>(A&a,A&b){.....}} 接口:用户和代码的互动。
客户端错误可以导入新类型而防止用户错误。
接下来是Date的实例,面对导入新类型。
对于数据范围,我们做了进一步的编程。更改如下:
尽量让自定义类型的行为与内置类型一致。
勤快的使用shared_ptr,因为他能防止客户犯下资源泄漏的错误。
但是shared_ptr是原始指针的两倍大,但是额外成本不显著。
下面讲一下设计class的设计规范:
1.注意对象的创建和销毁过程。
2.搞清对象初始化和赋值的区别。
3.class 的pass-by-value的意义(调用copy函数)
4.注意此类是否是基类或不是。
5.需要什么类型转换。
6.谁该取用新type成员。
7.构造函数的explicit。
8.看看是否一般化。
在类中成员函数的参数传递时,多用pass-by-reference-const而不用pass-by-value
因为1.速度快。2.能够类型转换(继承)
适合pass-by-value的类型:1.内置。2.STL迭代器和函数对象。
对于返回对象的非成员函数,不能乱用reference。
成员变量设为private。
改变共有成员变量会破坏客户代码。
用non-member和non-friend替换member,因为更好的封装。
愈多函数可访问他,数据封装性就愈低。
用namespace将类与便利函数封装,可以更好的布局。而且namespace可以随时添加函数。
若所有参数需要转换类型,采用non-member。
swap()
一般来说要用swap可以在class里声明一个swap成员函数,这样可以在swap成员函数中调用stl中的swap函数。
然后再到std中写下特化版本。
C++只能对class偏特化,而不能对function偏特化。
如果想调用std中swap,可以用using std::swap,意思是先看特化版本,再看一般模板版本。
本来的swap不能满足要求的原因是因为class中的pimpl手法:
解决步骤:
1.先public swap成员函数。
2.在class所在的namespace中提供一个non-member swap
3.当你调用swap时确定包含using声明式。
- Effective C++(1-4)
- <<Effective C++>>笔记4
- 《effective c++》读书笔记4
- <Effective C++>读书笔记-4
- 《more effective c++》笔记4
- 《Effective C++》 Reading Note 4
- <<Effective C++>>读书笔记(4)
- Effective C++(条款1-4)
- <<Effective C++>>读书笔记4: 设计与声明
- <<More Effective C++>>读书笔记4: 效率
- 《Effective C++》和《More Effective C++》汇总
- 《Effective C++》让自己习惯C++:条款1-条款4
- 《Effective Objective-C 2.0》4、Objective-C类的属性
- 《Effective C++》读书笔记
- 《Effective C#》 翻译札记
- 《Effective C++》读感
- 《Effective C++》读后感
- 读《Effective C++》所想
- CAB安装后不被删除
- Windows XP Embedded (XPE) ramdisk 启动遇到的一些问题和解决方法--part2
- 忘记mysql密码怎么办
- Windows Socket五种I/O模型——代码全攻略
- 基于链表的两种排序算法
- Effective C++ 4
- 闲聊
- 磨刀不误砍柴工
- 网站高级架构师要求
- 高效率的工作和加班
- Ubuntu下查看uuid
- 判断文件是否存在
- ubuntu英文环境下支持中文输入法
- Ubuntu下面的图形分区工具-GParted