为什么有了虚析构函数,就能先调用子类的析构函数
虚函数表的理论已经大概明白了,但是还是搞不懂,在有虚析构函数的情况下,为什么delete父类的指针,会先找到子类的析构函数。
如果是一般的虚函数,因为父类和子类的函数名字都是一样的,调用该函数的时候,通过虚函数表,就会找到子类的函数地址,调用相应的函数。
但是虚析构函数,父类和子类的函数名字是不同的,这样我就想不明白了,delete父类的指针,应该会去找父类的析构函数啊,怎么会先去子类的虚函数表中找到子类的析构函数呢?
虚函数表的理论已经大概明白了,但是还是搞不懂,在有虚析构函数的情况下,为什么delete父类的指针,会先找到子类的析构函数。
如果是一般的虚函数,因为父类和子类的函数名字都是一样的,调用该函数的时候,通过虚函数表,就会找到子类的函数地址,调用相应的函数。
但是虚析构函数,父类和子类的函数名字是不同的,这样我就想不明白了,delete父类的指针,应该会去找父类的析构函数啊,怎么会先去子类的虚函数表中找到子类的析构函数呢?
2016-07-17
兄弟我在网上看到一种说法,可以解决你的疑惑
总结:虚析构函数的地址存在于虚函数表中,和普通虚函数别无二致,同时也会像普通的虚函数一样进行覆盖
虽然父子的析构函数名字不一样,但是他们占同一个坑(即父子析构函数在虚函数表中的位置是一样的,否则就不存在多态了)
析构时,到特定的坑中调用该类型的析构函数,其析构函数中又嵌套了很多对父类的析构函数的调用
————————————————
版权声明:本文为CSDN博主「F_cff」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/F_cff/article/details/79690470
举报