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