2010-11-13
c++对象模型中,Nonstatic data members 被配置于每一个class object之内,static data members 则被存放在所有的class object之外。
static 和 nonstatic funtion members也被放在所有的class object 之外。
2010-11-27
构造语义学:
default constructor:
copy constructor的建构操作:
member class object 成员类对象
一个class object 可以从两种方式复制得到
1.初始化 ----> 从概念上,以copy constructor 完成
2.被指定(assignment) ------->从概念上,以copy assignment operator完成
一个class 不展出bitwise copy semantics时,有四种情况:
1.当一个class含一个member class object,而后者有一个copy constructor
2.一个class 的base class 有一个copy constructor
3.一个class 声明一个或多个virtual function
4.一个class 派生自一个继承链,其中有一个或多个virtual base class
2011-5-20
关于返回值优化(RVO)(参见 c++ model, more effective)
如果真的决定返回一个对象:
一个有效率和正确的做法.
Rational a = 10;
Rational b(1,2);
Rational c = a*b;
这些写,使得编译器得以消除 operator * 内的临时对象。编译器把return表达式所定义的对象构造于c的内存内。这样临时对象的成本为0;
只需要一个constructor的成本。
c是具名对象,具名对象是不能被消除的。相反,未具名对象是编译器消除的对象。
所以当面对抉择使用具名或未具名对象的时候,最好是使用未具名对象。当然在情势的逼迫下,有时侯不得不使用具名对象。