看板 C_and_CPP 關於我們 聯絡資訊
我知道這件事不該出現在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: ISO C++ FAQ http://tinyurl.com/pzdq9qs 11/12 16:16
LPH66: 同理 dtor 內子類別已解構不存在了, 呼叫 virtual 也下不去 11/12 16:17