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

本文探讨了C++类设计中的关键原则,包括构造函数、析构函数、复制控制、多态性、资源回收及RAII应用,旨在帮助开发者避免常见陷阱并提升代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条款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[]动作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值