全球旧事资料 分类
st成员函数有着实质等价的实现时,令
o
co
st调用co
st可避免代码重复。
确定对象被使用前已被初始化
永远在使用对象之前先将它初始化。对于无任何成员的内置类型,比如变量,指针,必须手工完成初始化。对于内置类型意外的任何东西,利用构造函数初始化,确保对象的每一个成员变量初始化(要注意赋值和初始化是两个不同的概念),初始化是利用成员初值列。赋值操作完成的是“伪初始化”,成员初值列完成的是“真正初始化”。初值列比赋值效率高。成员初始化次序最好是以其声明次序为次序。为了免除“跨编译单元之初始化次序”问题,请以localstatic对象替换
o
localstatic对象。明确拒绝编译器自动生成的函数将要拒绝生成的函数声明为private并且不予实现。如果还要拒绝其它成员函数或frie
d函数访问,则可以把需要拒绝访问的函数放在一个父类的private里。为多态基类声明virtual析构函数析构函数的运作方式:最深层派生类的析构函数最先被调用,然后是其每一个基类的析构函数被调用带多态性质的基类应该声明一个virtual析构函数。如果类中带有任何virtual函数,该类也应该又一个virtual析构函数。类的设计目的如果不是作为基类使用,或不是为了具备多态性,就不应该声明为virtual析构函数。异常远离析构函数析构函数绝对不要吐出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序。如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。构造和析构过程中绝不调用virtual函数,因为在基类构造和析构期间调用的virtual函数不可下降到派生类。令赋值操作符(operator)返回一个refere
cetothis实现“连锁赋值”。在operator中处理“自我赋值”的方法如下例子:1widgetwidgetoperatorco
stwidgetrhsIfthisrhsretur
this证同测试,如果自我赋值,就不做任何事。DeletePbPb
ewBitmaprhspbRetur
this2widgetwidgetoperatorco
stwidgetrhsBitmappOrigPb记住原先的PbPb
ewBitmaprhspb令Pb指向Pb的一个复件DeletepOrig删除原先的PbRetur
this
f3widgetwidgetoperatorco
stwidgetrhs使用copya
dswap技术widgettemprhs为rhs数据制作一份复件swaptemp将this数据和上述复件的数据交换Retur
this4widgetwidgetoperatorwidgetrhsrhs是被传对象的一份复件swaprhs将this数据和复件的数据交换Retur
this复制对象Copyi
gr
好听全球资料 返回顶部