看板 C_and_CPP 關於我們 聯絡資訊
https://ideone.com/37b1cy 基於上面的原因 我認為繼承enable_shared_from_this的class 本身必須不該被外面的人亂new 所以想要 提供一個Create函數 但面臨到 想要把constructor and destructor 放到 private field 會遇到問題 以下是目前的解法 https://ideone.com/RldNQ9 問題在於 create裡面其實涉及到多型 教科書上 都說這樣要把~base() 冠上 virtual 以免少呼 叫~derived() 但現在這情況 derived 是空的 不呼叫解構子也沒差 以這種情況 有什麼文件或是規範證明 不寫也沒差嗎? 對於memory的回收毫無影響嗎? 一直不是很清 楚只知道書本上要你這樣做 另一個問題是 https://www.geeksforgeeks.org/pure-virtual-destructor-c/ 這寫法 看起來是刻意把 class 宣告 讓人感覺是完全的 abstract 這種寫法 是完全合乎標準的嗎? 有什麼實際好處非要這樣做呢 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.9.75.145 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1527214823.A.2B7.html
bluesoul: 這是一個好的習慣 05/25 10:24
bluesoul: Effective C++ item 7 05/25 10:25
loveflames: 不呼叫derived dtor的行為未定義 05/25 11:08
longlongint: 只是要強迫你實作解構子而已 05/25 12:59
loveflames: 初學不需要一開始就鑽研語法以外的東西,之後看聖經本 05/25 13:23
loveflames: 自然會知道好壞處,現在研究這個只是鑽牛角尖 05/25 13:23
dreamboat66: 其實也不是初學 只是以現有知識 我只知道他不會呼叫d 05/25 14:26
dreamboat66: erived destr, 但以這種case 根本沒呼叫我也沒差, 05/25 14:26
dreamboat66: 那到底可不可以不寫virtual?會讓我很confused 05/25 14:26
steve1012: 一開始沒差 寫久了要maintain 可能就有差了 一律加virt 05/25 23:50
steve1012: ual 05/25 23:50
steve1012: 要藏constructor =delete 就好 05/25 23:53
steve1012: pure virtual destructor可以強制讓class變abstract 強 05/26 00:02
steve1012: 制children class override 是完全合乎標準的 05/26 00:02
hunandy14: eff c++ 裡面很詳細可以去借來看看 06/14 00:55
hunandy14: 抽象物件不可建立 所以你令 解構子=0 就符合要求了 06/14 00:56
hunandy14: 我記得後來有一個語法可以處理,不用再用抽象物件來做 06/14 00:57
hunandy14: 不知道是不是 steve 所提的~想不起來 06/14 00:57
hunandy14: 只要你要繼承 A 那麼 A 至少要有一個 虛擬函式 06/14 00:59
hunandy14: 不然 虛擬表 不會被建立,沒這個表不能跑多型了 06/14 01:02
hunandy14: 當然還是可以用拉,只是就繼承的優點好處都沒了~ 06/14 01:03