Re: [問題] Virtual函數在Destructor內的問題

看板C_and_CPP作者 ( )時間15年前 (2010/07/07 16:59), 編輯推噓4(405)
留言9則, 7人參與, 最新討論串2/2 (看更多)
剛剛自己找到答案了XD http://www.artima.com/cppsource/nevercall.html 大概是說不要在 Constructor 和 Destructor 內呼叫 virtual function 因為新建 object 時,會先呼叫 base class 的 constructor 此時 derived class 的 data 還沒被初始化 若是在這個時候就呼叫 derived class 的 virtual function 會產生不可預期的後果 而在刪除 object 時,會先呼叫 derived class 的 destructor 當呼叫到 base class 的 destructor 時,derived class 的 data 已經被清掉了 此時呼叫 virtual function 也是會產生不可預期的後果 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.215.187

07/07 17:11, , 1F
記得前面有類似的討論
07/07 17:11, 1F

07/07 17:24, , 2F
串一下"想請教一個C++考題"
07/07 17:24, 2F

07/07 23:03, , 3F
之前記得就是james大回的文
07/07 23:03, 3F

07/07 23:03, , 4F
constructor dstr內呼叫virtual都不virtual了
07/07 23:03, 4F

07/08 00:10, , 5F
不過我這次講錯了 XD 慚愧中
07/08 00:10, 5F

07/08 03:27, , 6F
前陣子看primer好像有提到在constor和destor裡呼叫virtual
07/08 03:27, 6F

07/08 03:28, , 7F
函數會以該constor和destor所在的作用域作為函數的作用域
07/08 03:28, 7F

07/08 07:44, , 8F
Effective C++是您的好伙伴
07/08 07:44, 8F

07/08 12:19, , 9F
總之就是物件還沒被建構完全應該視為base class
07/08 12:19, 9F
文章代碼(AID): #1CD47fYt (C_and_CPP)
文章代碼(AID): #1CD47fYt (C_and_CPP)