[问题] 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