c++设计的一些tips

函数调用传参时,尽量使用传引用而减少使用传值。

原因是,当传入一个较大对象时,传值会复制一份相同的内容,这样会调用多次构造函数,带来的代价会比较高。

减少成员函数返回值指向成员的非const指针或引用

这样导致的结果是,可以借助该类外的引用或非const指针来访问修改该类的内部成员,破坏了类的封装,该成员不再受private与protected的保护,可能随时会被外部读写,导致危险。
同样的事情会发生在全局非const指针或引用指向类的成员情况下。

在operator=中检查自赋值

这里的自赋值包括自己给自己赋值,也包括自己与自己的引用之间的赋值关系。
它常常会带来一个危险:
如果该类需要动态申请内存,则一定要删除掉旧内存,这样在自赋值时,就会存在对象将自己的内存释放掉,再进行赋值时,不会得到一个不变的值,而是得到一片已经被释放的空间,这样会带来危险。
检查自赋值时可以用判断地址是否相等的方法。

分清成员函数,非成员函数和友元函数

成员函数与非成员函数的最大区别是:
成员函数可以是虚函数,而非成员函数不行

重载操作符通常不作为成员函数的原因是:
当执行两个不同类型的对象进行操作时,只有定义了该操作的对象才能放在等号后的第一个操作数位置。因为另一对象不存在这样的一个成员函数使得这样的操作合法,因而不可以做等号后的第一个操作数。形式上不满足适用交换律的操作。

而将其声明为一个非成员函数就可以满足上面的要求
将其声明为友元函数是没有必要的,对对象的内部私有成员的访问可以通过公用接口实现,而不必将其声明为友元。

而输入输出操作符<<和>>常常需要重载访问对象的私有成员,因而将其声明为友元函数。

因而:
如果右边需要对左边的参数进行类型转换,则应将其声明为非成员函数。如果还需要访问该类的私有成员,则将其声明为友元函数。否则将其声明为成员函数。

尽可能使用const

重载运算操作符的返回值常常要返回一个该类型的对象,这里应该将其用const修饰,否则可能会导致这样的问题:
运算的返回值将可能被用作左值被其他对象赋值,如将c的值赋给a+b,应约束这样的不符常理行为,所以应当用const修饰尽可能使运算结果不被修改。

猜你喜欢

转载自blog.csdn.net/lxx909546478/article/details/89205015