作者charleshu (即兴的人生最美)
看板C_and_CPP
标题Re: [问题] 为何多型物件的解构子要用virtual?
时间Tue Jan 5 00:47:21 2021
※ 引述《d630200x (DOGE)》之铭言:
: 我对virtual的理解是将该函式宣告为可override
: 应该是类似对其产生function pointer,使得可以依据实际型态执行对应的function
: 但是我无法理解为何base class desturctor也需要宣告virtual
: 照理来说base与derived的删除应该互不相关才对
: derived先把自己删除,base再删除自己
: 为何变成指标後base不宣告virtual後derived就不会被执行了?
: -----
: Sent from JPTT on my Asus ASUS_I01WD.
这是为了确保在多形状况的 delete 可以呼叫到
正确的 derived class 的 destructor.
否则当你用 base class 的 pointer 来接受 new
来的 derived object 时,当你 delete 这个 object
时,编译器会只呼叫到 base class 的 destructor
因为根据 base class 的宣告,它的 destructor
不是 virtual,不需要去 virtual table 里面找。
因为难以用三言两语说清楚,有兴趣可以参考
inside C++ object model 的内容
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.204.7.185 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1609778849.A.BDA.html
※ 编辑: charleshu (123.204.7.185 台湾), 01/05/2021 00:50:05
※ 编辑: charleshu (123.204.7.185 台湾), 01/05/2021 00:52:49
1F:→ loveme00835: 在 resolve function call 的时候并没有 vtable 的观 01/05 01:44
2F:→ loveme00835: 念 [expr.call] 3. 如果看到 virtual 编译器就要去 v 01/05 01:44
3F:→ loveme00835: table 找实体那就无法解释 [class.cdtor] 4 的行为. 01/05 01:44
4F:→ loveme00835: 你这是从实作来理解语言设计 01/05 01:44