稍微记录一下effective c++的一些东西

纸上学来总觉浅,绝知此事要躬行。

书还没看完,,第一遍过到现在,感觉都忘记了,没写过代码,总觉得差很多,以后有机会一定每条实践过去。

多使用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转型

原文地址:https://www.cnblogs.com/You0/p/4645924.html