[問題] virtual destructor的問題

看板C_and_CPP (C/C++)作者 (小嫩)時間7年前 (2018/05/25 10:20), 編輯推噓4(4017)
留言21則, 6人參與, 7年前最新討論串1/1
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

05/25 10:24, 7年前 , 1F
這是一個好的習慣
05/25 10:24, 1F

05/25 10:25, 7年前 , 2F
Effective C++ item 7
05/25 10:25, 2F

05/25 11:08, 7年前 , 3F
不呼叫derived dtor的行為未定義
05/25 11:08, 3F

05/25 12:59, 7年前 , 4F
只是要強迫你實作解構子而已
05/25 12:59, 4F

05/25 13:23, 7年前 , 5F
初學不需要一開始就鑽研語法以外的東西,之後看聖經本
05/25 13:23, 5F

05/25 13:23, 7年前 , 6F
自然會知道好壞處,現在研究這個只是鑽牛角尖
05/25 13:23, 6F

05/25 14:26, 7年前 , 7F
其實也不是初學 只是以現有知識 我只知道他不會呼叫d
05/25 14:26, 7F

05/25 14:26, 7年前 , 8F
erived destr, 但以這種case 根本沒呼叫我也沒差,
05/25 14:26, 8F

05/25 14:26, 7年前 , 9F
那到底可不可以不寫virtual?會讓我很confused
05/25 14:26, 9F

05/25 23:50, 7年前 , 10F
一開始沒差 寫久了要maintain 可能就有差了 一律加virt
05/25 23:50, 10F

05/25 23:50, 7年前 , 11F
ual
05/25 23:50, 11F

05/25 23:53, 7年前 , 12F
要藏constructor =delete 就好
05/25 23:53, 12F

05/26 00:02, 7年前 , 13F
pure virtual destructor可以強制讓class變abstract 強
05/26 00:02, 13F

05/26 00:02, 7年前 , 14F
制children class override 是完全合乎標準的
05/26 00:02, 14F

06/14 00:55, 7年前 , 15F
eff c++ 裡面很詳細可以去借來看看
06/14 00:55, 15F

06/14 00:56, 7年前 , 16F
抽象物件不可建立 所以你令 解構子=0 就符合要求了
06/14 00:56, 16F

06/14 00:57, 7年前 , 17F
我記得後來有一個語法可以處理,不用再用抽象物件來做
06/14 00:57, 17F

06/14 00:57, 7年前 , 18F
不知道是不是 steve 所提的~想不起來
06/14 00:57, 18F

06/14 00:59, 7年前 , 19F
只要你要繼承 A 那麼 A 至少要有一個 虛擬函式
06/14 00:59, 19F

06/14 01:02, 7年前 , 20F
不然 虛擬表 不會被建立,沒這個表不能跑多型了
06/14 01:02, 20F

06/14 01:03, 7年前 , 21F
當然還是可以用拉,只是就繼承的優點好處都沒了~
06/14 01:03, 21F
文章代碼(AID): #1R1tBdAt (C_and_CPP)
文章代碼(AID): #1R1tBdAt (C_and_CPP)