C++ 改善程序与设计的做法

来源:互联网 发布:linux版本 编辑:程序博客网 时间:2024/04/28 07:49

条款6

编译器会为类自动创建default构造函数、copy构造函数、copy assignment操作符。若不想要这些功能,以免被其他类调用,可以将相应的类函数声明为private并不予实现。也可以单独做一个Uncopyable类,此类设置某些函数为private类型,作为基类使用。 

条款7

带多态性质的基类应该声明一个虚析构函数。如果一个类带有任何虚函数,它就应该拥有一个虚析构函数。

类的设计目的如果不是为了作为具有多台性质的基类,那么这个类最好不要声明虚析构函数,否则会带来不必要的开销。

条款8

析构函数绝对不要抛出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕获任何异常,然后吞下他们或结束程序。

如果客户需要对某个操作函数运行期间跑车的异常做出反应,那么累应该提供一个在析构函数之外的函数执行该操作。

条款9

在构造函数和析构函数期间不要调用virtual函数,因为这类迪欧用从不下降至派类。

条款10

为了赋值的传递性存在,令operator =返回一个指向自身的指针即*this。

条款11

为了避免自我赋值出现异常,可以采用两种方法。一:证同测试,如果等号左右相同就不执行赋值。二:copy and swap,即做一个副本然后用swap做交换。

条款12

coping函数应该确保赋值对象内的所有成员变量和所有base class的成分。因此,在字定义的cipying 函数中不仅要赋值自身的成员,还要主动调用父类的copying函数。

条款13

为了方式资源泄露,请使用RAII对象,他们在构造函数中获得资源并在析构函数中释放资源。

两个被常用的RAII类分别是tr1::shared_ptr和auto_ptr。请注意两者的区别。后者不允许有两个对象拥有统一资源。

注:

tr1::shared_ptr采用“引用计数智能指针”-RCSP(Reference-counting Smart Pointer)

RAII(Resource Acquisition Is Initialization)即,“资源取得时机便是初始化时机”。

在动态分配而得到的Array上使用auto_ptr或tr1::shared_ptr是不行的,因为两者在其析构函数内做的事delete而不是delete[]动作。

 

0 0
原创粉丝点击