[問題] virtual destructor的問題

作者: dreamboat66 (小嫩)   2018-05-25 10:20:14
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
這種寫法 是完全合乎標準的嗎? 有什麼實際好處非要這樣做呢
謝謝
作者: bluesoul (忙死你老爸)   2018-05-25 10:24:00
這是一個好的習慣Effective C++ item 7
作者: loveflames (咕啾咕啾魔法陣)   2018-05-25 11:08:00
不呼叫derived dtor的行為未定義
作者: longlongint (華哥爾)   2018-05-25 12:59:00
只是要強迫你實作解構子而已
作者: loveflames (咕啾咕啾魔法陣)   2018-05-25 13:23:00
初學不需要一開始就鑽研語法以外的東西,之後看聖經本自然會知道好壞處,現在研究這個只是鑽牛角尖
作者: dreamboat66 (小嫩)   2018-05-25 14:26:00
其實也不是初學 只是以現有知識 我只知道他不會呼叫derived destr, 但以這種case 根本沒呼叫我也沒差,那到底可不可以不寫virtual?會讓我很confused
作者: steve1012 (steve)   2018-05-25 23:50:00
一開始沒差 寫久了要maintain 可能就有差了 一律加virtual要藏constructor =delete 就好pure virtual destructor可以強制讓class變abstract 強制children class override 是完全合乎標準的
作者: hunandy14 (Charlott.HonG)   2018-06-14 00:55:00
eff c++ 裡面很詳細可以去借來看看抽象物件不可建立 所以你令 解構子=0 就符合要求了我記得後來有一個語法可以處理,不用再用抽象物件來做不知道是不是 steve 所提的~想不起來只要你要繼承 A 那麼 A 至少要有一個 虛擬函式不然 虛擬表 不會被建立,沒這個表不能跑多型了當然還是可以用拉,只是就繼承的優點好處都沒了~

Links booklink

Contact Us: admin [ a t ] ucptt.com