Simple Items

来源:互联网 发布:图片加音乐软件 编辑:程序博客网 时间:2024/06/06 04:36

Item 7 多态基类中将析构函数声明为虚拟

 

1> 多态基类应该声明虚析构函数。如果一个类有任何虚函数,它就应该有一个虚析构函数。

2> 纯虚析构函数也必须有函数体。否则linker报错。

 

● Item 10 赋值函数要返回引用

赋值函数的特点:
1> 可以无限连:x = y = z = 15;
2> 满足右结合律:x = (y = (z = 15));

基于上面的特点,赋值操作必须返回*this。
+=、-=、*=等操作也算在内。

● Item 16 使用匹配的new和delete

 

std::string *stringArray = new std::string[100];
delete stringArray;

上面使用delete回收对象数组的资源,属于未定义行为。反之亦然。

需对typedef的数组注意:



应在实际使用中避免此类写法。需要动态数组的时候,使用STL里的string或vector。

 

Item 21 必须返回对象时别返回引用

 

1> 绝不要返回一个局部栈对象的指针或引用

2> 绝不要返回一个被分配的堆对象的引用。原因是caller在使用该引用时,可能会因为无法保存引用而导致资源泄漏。

3> 如果存在需要一个以上这样的对象的可能性时,绝不要返回一个局部 static 对象的指针或引用。原因:多个地方使用同一个该static对象的引用,会引起理解混乱。caller们以为多次调用是多个对象,想不到竟然其实是一个对象。

 

● Item 22 将数据成员声明为private

理由:
1> 通过函数实现对成员的访问控制
2> 封装后,可以在实现上有自由度,来适应客户的实际需要
3> 只允许你的成员函数访问它们,你就有权力在以后修改它们。一旦声明为public或protected,就变成客户的东西了,你不能改

 

● Item 24 需要对所有参数实施类型转换的话,使用非成员函数

 

 

Item 28 避免返回对象内部构件的句柄

 

所谓句柄,就是引用,指针,或STL中的迭代器。返回对象内部的句柄有可能会产生空悬句柄。比如下面返回的Point引用。

 

● Item 32 公有继承是is-a的关系
● Item 38 通过“合成”来实现附属关系、附属功能