纸上学来总觉浅,绝知此事要躬行。
书还没看完,,第一遍过到现在,感觉都忘记了,没写过代码,总觉得差很多,以后有机会一定每条实践过去。
多使用const
const出现在星号左边,表示被指物是常量,右边表示指针自身是常量
const成员函数:http://blog.sina.com.cn/s/blog_4dd77fd10100lug5.html
(const对象只能访问const成员函数)
const Rational operator* (const Rational& rhs) const;
返回一个const by-value 接受reference-to-const
C++转型:
const_cast
static_cast
http://blog.csdn.net/xiaobo620/article/details/7397743
Widget& operator=(const Widget& rhs)
{
return* this;
}
mutable
条款三:在使用对象之前将它初始化
总是在初值列中列出所有成员变量。
使用local-static代替non-local-static
http://blog.csdn.net/insistgogo/article/details/9427389
智能指针,类似于python的垃圾清除器:
std::auto_ptr //只允许一个对象访问
std::tr1::shared_ptr
手工释放资源时会出错,建议使用资源管理的类<资源取得时机便是初始化时机>(RAII)
explicit
不要执着于单语句,对于RAII来说 原因:
C++中函数形参之间创建产生的时间顺序是按照效率来的,
std::tr1::shared_ptr<xxx>(new xxx),test()
如果顺序如下
new
test
shared_ptr传参。
test出错那么shared_ptr自然也就炸了。资源泄露。
尽量以pass-by-reference-to-const 替换 pass-by-value
static对象设计(威胁)->多线程安全性?
不封装就难以改变(威胁到客户码)
面向对象守则,数据要尽可能封闭
封装的越厉害,对其封装的改变量就越大。
namespace xxx{
}
宁已non-member non-friend函数替换member函数
只有当参数被列于参数列内,这个参数才是隐式类型转换的合格参与者。
可以根据需求将std::swap特化
std::vector<std::tr1::shared_ptr<Windows>> VPW (使用类型安全容器)
尽量避免dynamic_casts转型