Effective c++ 札记2

1.=号运算符

1.1 尽量把=号运算符的返回值设定为一个当前对象的引用
1.2 要特别注意住在operator=中考虑处理自我赋值这一特例
1.3 复制时要复制所有成员,应特别注意当继承存在时的情况

2.资源管理

2.1   auto_ptr和shared_ptr的析构函数中只针对delete进行操作,而不是delete[],所以不要这样写
std::auto_ptr<std::string>  aps(new  std::string[10])
2.2  为了解决上面的问题。可以使用 vector。或者,使用boost库中的boost::scoped_array、boost::shared_array
2.3  delete时注意是否要用delete[] ,这在有typedef时会是一个很隐蔽的陷阱
2.4  观察以下语句
processWidget(std::trl::shared ptr<Widget> (new  Widget) ,  priority());
由于c++中参数语句执行顺序不定,若在new Wiget之后,再执行priority(),而priority()发生了异常,那么new Widget出的东西就泄漏了 

3.关于模板

缺省情况下,模板中的嵌套从属名称不被编译器当作是一个类型
template<typename  C>
void doSome(const  C&   container)
{
C::const_iterator iter(container.begin());   //报错
}
若想达到我们想要的功能,要这样写:
typename C::const_iterator iter(container.begin());

 

4.关于引用传值

4.1

赋值传值在遇到继承、多态时会发生一些容易让人犯错的情况: 

void doSome(BaseClass b)
{
b.doSome();
}
如果执行doSome(inheritobject)时,运行的是基类的方法
而写成void doSome(const &BaseClass)可以解决这一问题
4.2
若非必要,不要试图让函数返回一个引用,更不要返回一个局部变量的地址。

One thought on “Effective c++ 札记2

发表评论

电子邮件地址不会被公开。 必填项已用*标注