關(guān)于初始化列表,它在構(gòu)造函數(shù)的函數(shù)體之前執(zhí)行。
關(guān)于繼承,子類的構(gòu)造函數(shù)在自身函數(shù)體執(zhí)行之前調(diào)用父類的構(gòu)造函數(shù),子類的析構(gòu)函數(shù)會在自身的函數(shù)體執(zhí)行之后調(diào)用父類的析構(gòu)函數(shù)。
關(guān)
于多態(tài),有虛函數(shù)的類的對象中會在最前面多出4個(gè)字節(jié)來作為虛表指針,父類的構(gòu)造函數(shù)會設(shè)置對象的虛表指針指向父類的虛函數(shù)表,然后這個(gè)類的構(gòu)造函數(shù)會重
新設(shè)置對象的虛表指針指向這個(gè)類的虛函數(shù)表,這個(gè)類的析構(gòu)函數(shù)會再次設(shè)置對象的虛表指針指向這個(gè)類的虛函數(shù)表,最后調(diào)用父類的析構(gòu)函數(shù)又會重新設(shè)置對象的
虛表指針指向父類的虛函數(shù)表,所以在構(gòu)造和析構(gòu)函數(shù)中即使調(diào)用虛函數(shù)也不會有多態(tài)發(fā)生。但是構(gòu)造完畢之后析構(gòu)之前,調(diào)用虛函數(shù)則會通過對象的虛表指針找到
虛函數(shù)表來調(diào)用,多態(tài)可以正常工作。
關(guān)于new/delete,new是先分配空間再調(diào)用構(gòu)造函數(shù),delete會先調(diào)用析構(gòu)函數(shù)再釋放空間。如果是虛析構(gòu),看下一條。
關(guān)于虛析構(gòu),實(shí)際上析構(gòu)不是虛函數(shù),用一個(gè)虛函數(shù)scalar_deleting_destructor來替代,它會先調(diào)用析構(gòu)函數(shù),然后根據(jù)傳入的參數(shù)是否(最低位)是1來決定是否用delete釋放空間。
posted on 2010-08-06 12:58
何克勤 閱讀(258)
評論(0) 編輯 收藏 所屬分類:
C/C++