Chinaunix首页 | 论坛 | 博客
  • 博客访问: 259153
  • 博文数量: 84
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 927
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-06 23:00
个人简介

growing

文章分类

全部博文(84)

文章存档

2017年(6)

2016年(61)

2015年(17)

我的朋友

分类: C/C++

2017-01-31 18:48:10

1.尽量以const,enum,inline替换#define

用const替换#define原因之一:调试代码的时候,宏替换是直接把一个变量名替换为一个数字,在调试器里直接出现一个数字你可能会摸不着头脑,把这个变量定义为const就会出现变量名,不至于忘记它是干什么的。

总结:对于单纯的常量,最好以const或者enum替换#define,对于形似函数的宏,最好用inline函数替换#define

2.尽可能的使用const

想要pass by reference来提高效率又不想改变原对象,别忘了定义为const

在重载符号,比如重载*时,返回对象最好定义为const,以防有人if(a * b = c),因为少打一个=而把c赋值给a*b的结果了。但是在重载[ ]时,不能返回不可修改的const对象,因为很多时候都会进行 a[0] = 'x'这种修改变量的操作,而且别忘了要返回引用形的变量,否则修改的只是一个副本。

注:关键字mutable可以释放掉non-static成员变量的bitwise constness约束,使成员可被修改。

3.确定对象使用前已经被初始化。


4.在C++的类中为了杜绝编译器自己提供的机能(比如拷贝构造,赋值运算符),可以将其声明在private中且不予实现,并且继承此类的子类也将杜绝此机能(因为子类拷贝构造也需要调用父类)。

5.为多态基类声明virtual析构函数。(防止父类型的指针开辟的子类型的对象,在析构时只调用父类型的析构函数,没有析构开辟的子类而导致内存泄漏,比如:工厂模式)

注:如果不需要用到多态,且这个类根本不会被当做base class,那就没必要声明成virtual,只会浪费空间而已。
     同样的,不要去继承用到多态,析构函数却不是虚函数的父类!(比如去继承non-virtual的STL容器)

6.别把异常放在析构函数(如果要把任何一个可能抛出异常的函数放在析构函数中,析构函数应该吞下他们不传播,或者结束程序)。

7.绝不在析构或者构造函数中调用virtual函数。
 
8.令operator=返回一个reference to *this(支持连等),并处理自己给自己赋值的情况(直接return *this)。
  可以以by value的方式传参然后swap~

9.复制对象时勿忘其每一个成分。

10.RAII资源管理 

读到p63,待续。
阅读(1495) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~