Effective C++ 4

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声明式。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有人说c++程序员可以分成两类,读过effective c++的和没读过的。世界顶级c++大师scott meyers成名之作的第三版的确当得起这样的评价。当您读过这本书之后,就获得了迅速提升自己c++功力的一个契机。.(2-1)   在国际上,本书所引起的反响,波及整个计算技术出版领域,余音至今未绝。几乎在所有c++书籍的推荐名单上,本书都会位于前三名。作者高超的技术把握力、独特的视角。诙谐轻松的写作风格、独具匠心的内容组织,都受到极大的推崇和仿效。这种奇特的现象,只能解释为人们对这本书衷心的赞美和推祟。《effective c++》前两个版本的确抓住了全世界无数程序员的目光。原因十分显明:scott meyers 极富实践意义的c++ 研讨方式,描述出专家用以产出干净、正确、高效代码的经验法则和行事法则——也就是他们几乎总是做或不做的某些事。   这本书不是读完一遍就可以束之高阁的快餐读物,也不是用以解决手边问题的参考手册,而是需要您去反复阅读体会的,c++是真正程序员的语言,背后有着精深的思想与无与伦比的表达能力,这使得它具有类似宗教般的魅力。希望这本书自瞄帮助您跨越c抖的重重险阻,领略高处才有的壮美风光,做—个成功而快乐的c++程序员。...      本书一共组织 55 个准则,每一条准则描述一个编写出更好的 c++ 的方式。每一个条款的背后都有具体范例支撑。第三版有一半以上的篇幅是崭新内容,包括讨论资源管理和模板(templates)运用的两个新章。为反映出现代设计考虑,对第二版论题做了广泛的修订,包括异常(exceptions)、设计模式(design patterns)和多线程(multithreading)。      《effective c++》的重要特征包括:    * 高效的 classes、functions、templates 和inheritance hierarchies(继承体系)方面的专家级指导。    * 崭新的 "tr1" 标准程序库功能应用,以及与既有标准程序库组件的比较。    * 洞察 c++和其他语言(例如java、c#、c)之间的不同。此举有助于那些来自其他语言阵营的开发人员消化吸收 c++ 式的各种解法。(2-1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值