EFFECT C++总结

本文总结了C++编程中的最佳实践,包括使用const、enum、inline替代#define,充分利用const,确保对象初始化,理解编译器自动生成的函数,拒绝不需要的函数,声明virtual析构函数,避免异常逃离析构函数,正确处理拷贝行为,使用智能指针管理资源,设计易用且不易误用的接口,以及区分接口继承和实现继承等关键点。
摘要由CSDN通过智能技术生成

EFFECT C++总结

条款01 视c++为一个语言联邦
….好吧

条款02 尽量以const,enum,inline代替#define

1、用const常量代替define,方便调试,所使用的名字会进入符号表
2、常量指针 和class专属常量(static const int a = 5)
        在class中:属于声明,不是定义式(如果不用取得常量的地址,就不用定义,定义的时候也不用赋初值了,声明已经赋了)

3、enum hack(有些编译器不支持在class内赋初值)
        不可以取得enum的地址,跟define很像
4、对于define的函数..额…所有参数用个小括号括住…当然,inline template代替会更好~

条款03 尽可能使用Const
指针中,const处于不同位置:星号前面:被指物为常量,星号后面:指针为常量

const成员函数,两个函数的常量性不同,是可以重载的~(常量函数(不更改任何成员变量)和非常量函数)
【如果函数返回的是一个内置类型的返回值,修改这个返回值是不合法的】

mutable:成员变量将允许在常量函数被修改

非const函数可以调用const函数
不要让const函数调用非const函数

条款04  确定对象被使用前已先被初始化
内置型对象要手工初始化,C++不保证会初始化
确保每一个构造函数对每一个对象进行初始化

赋值 与 初始化的区别:
成员初值列属于初始化,在构造函数内执行的…是赋值~

成员初值列要列出所有成员

对static对象,确定哪个先初始化是很困难的,有必要的话用单例(local static)代替 0n

条款05 了解C++默默编写并调用那些函数
1、default构造函数:
2、析构函数:不是virtual,除非父类的析构函数是virtual)
3、复制构造函数:按成员类型:
        类类型(string):直接调用类(string)的构造函数
       内置类型:直接copy bits
4、赋值运算符重载:成员带引用的或者常量的,都拒绝生成,此时,没有重载运算符而且进行实例之间赋值操作的话,将会出现编译错误

条款06 若不想使用编译器自动生成的函数,就该明确拒绝
1、将想要禁止的函数声明为private(成员方法还是能够使用)
2、将想要禁止的函数声明为private,不实现(连接时错误)
3、将该类继承一个UnCopyable的类(该类的方法同样声明为private,不实现)【编译时错误,但是会导致多重继承】

条款07 为多态基类声明virtual析构函数
 1、一个要用作基类的class(尤其带virtual成员),其析构函数也要是virtual
2、不能所有类的析构函数都是virtual,你要弄个vtbr,占空间
3、不要继承不是设计为基类的构造函数(如STL(string,vector))他们的析构函数可没有virtual

条款08 别让异常逃离析构函数
 1、析构函数跑出异常可能会导致程序过早结束,或者其他不确定行为
2、跑出异常后有两种处理办法:记录异常并且结束程序,吞下异常
3、比较好的解决方案,弄一个函数,让用户自己选择:

void Close()
{
    db.close();
    closed = true;
}
~DBConn()
{
    if(!closed)
    {
        try{
            db.close();
        }
        catch{
            …..    
        }
|
    }
}

条款09 绝不让构造和析构过程中调用virtual函数
 1、在继承体系中,构造函数的执行顺序:父类 ->子类。在父类的构造函数,或者其调用的函数中调用virtual函数,此时,子类还没创建ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值