《深入C++对象模型》笔记
P88
static? data member則放在global data segment中,不會影響class object的大小
但一個template class 的static? data member稍有不同
?
?P96
static? data member如果是從復(fù)雜繼承關(guān)系里繼承而來,或者是virtual base classs的member,程序中該 static? data member還是只有一個實體.而其存取路徑也是直觀的.?
P98
每一個nonstatic data member的偏移量在編譯期即可知道.
Point3d origin;
?
Point3d *pt = &origin;?
origin.x=0.0;pt->x= 0.0;
?
origin.x = 0.0等價于&origin+(&Point3d::x-1)
當(dāng)Point3d是一個derived class,而其繼承結(jié)果中有一個virtual base class時,而且x是
virtual base class的成員,那么對x的存取效率就有重大差異。因為pt不知道指向哪個對象,只能在運行時才知道。?
P164
class B1{};
class B2{};
class D : public B1, public B2{};
?B1 *pb1=new D;//使用主虛表
B2 *pb2=new D; //使用次虛表
?
P169
?不要在virtual base class中聲明nonstatic data member
?
?176
virtual function其地址在編譯期是未知的,所以,對virtual member function取地址,得到的是一個索引值。
?
205
如果有需要以值方式傳遞返回一個local class object,那么需要提供一個copy constructor
?
206
-初始化virtual base class constructors(以base class聲明順序)
-初始化 base class,第二個和后續(xù)的base class初始化時,this指針需要調(diào)整
-設(shè)置vptr指向vtbl
-初始化member initialization list中的data member
-如果一個member沒有出現(xiàn)在member initialization list里,但它有一個default contror,那么調(diào)用default contror
?
220
一個class 對于默認的copy assignment operator 在以下情況下不會表現(xiàn)出bitwisecopy:
-當(dāng)class內(nèi)帶一個member object,而其class有一個copy assignment opt
-當(dāng)一個class 的base calss有copy assignment opt
-當(dāng)class聲明了任何virtual functions
-當(dāng)class繼承自一個virtual base class
?
?224
?
copy assignment operator在虛擬繼承情況下行為不佳,許多編譯器不能得到正確的語義。所以不要讓一個virtual base class有copy操作,所以不要在virtual base class中聲明數(shù)據(jù)。?
?
230
如果class沒有destructor,那么只有在class內(nèi)帶的member object有destructor時,編譯器才會合成出一個destructor。
?
235
?
?-開始執(zhí)行class 的destructor
-如果class有member class object,而后者有destructor ,那么他們會以聲明相反的順序被調(diào)用。
-如果object內(nèi)帶vptr,則被重新設(shè)置,指向適當(dāng)?shù)腷ase class的vtbl
-執(zhí)行nonvirtual base class的destructor
-執(zhí)行virtual base class的destructor
?
268
T c= a+b;不產(chǎn)生臨時變量
?
T c; c= a+b;產(chǎn)生臨時變量?
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/yaoyansi/articles/2506118.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的《深入C++对象模型》笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse导入类库【Java】
- 下一篇: django1.4 关于处理静态文件的问