作者lovejomi (JOMI)
看板C_and_CPP
標題[問題] 在建構子/解構子呼叫virtual function?
時間Wed Nov 7 00:49:22 2018
我知道這件事不該出現在C++ code中
但是我想問幾個問題
0.
觀念上 建構是從 Base往Derived建構 解構則相反
所以我"測試" 顯示
建構子呼叫virtual --> 自己這層如果有override就呼叫自己這層,
如果沒有就往老爸呼叫
解構子呼叫virtual --> 跟建構子一樣, 因為比自己derived的都已經走完解構子了
所以也是呼叫自己這層or往derived呼叫
https://ideone.com/2fAWIA 測試程式
1. 以上的"測試" 結果是by compiler implementation還是規定就是這樣行為呢?
2. 如果目前compiler都這樣實作的話, 除非呼叫pure function call必定crash外
我能很肯定的說 "絕對不會crash嗎"?
因為最近遇到一些crash發現解構子有呼叫virtual function但都不是pure virtual
很想排除這個造成crash的因素, 但又不知道是不是真的絕對不會crash.
3. 若發生了pure function call 他會crash
在我的terminal印出
pure virtual method called
terminate called without an active exception
, 請問這種crash是歸類於什麼呢? 我用try catch(...)攔不到他
他是一個signal嗎? 用VC跑他就abort()了
我不知道這到底是"什麼" 只知道會crash
以上
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.26.160.166
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1541522966.A.8D9.html
推 phishingphi: 在 constructor 裡面呼叫 virtual function 有問題 11/10 00:38
→ phishingphi: 感覺上自己的"身分"不明,例如 base class 中有個 f 11/10 00:39
→ phishingphi: 為 virtual function,假設 subclass 有 override 11/10 00:39
→ phishingphi: 可是 initialization 根本還沒走到 subclass 的 11/10 00:40
→ phishingphi: data member initialization,要怎麼用它的 virtual 11/10 00:40
→ phishingphi: function 實作? 11/10 00:40
→ phishingphi: 忘了 gotw 還是哪裡的文章書籍有敘述過 11/10 00:42
→ LPH66: 同理 dtor 內子類別已解構不存在了, 呼叫 virtual 也下不去 11/12 16:17