事情是这样的,虽然都知道,当基类对象指针指向开辟的派生类对象空间是,
基类、派生类的构造函数和析构函数是怎么走的。但是这其中的原理还是想一探究竟。
因为如果基类的析构函数不是虚函数,那么在释放空间的的时候,仅仅释放基类对象的空间,而开辟的派生类对象空间没有得到释放。
这里会牵扯到 虚函数表
怎么说虚函数表呢,每一个派生类对象都会有一张与之对应的继承关系的基类表,如果基类的虚函数在派生类中有实现,那么实际上的表中相关函数是培派生类的实现,而不是单一的基类实现,当然一般都建议在基类把“这个口子”写成纯虚函数,派生类去实现。
虚函数表的解析可以看大神,陈皓写的 陈皓—虚函数表解析
//然后写了一个c++ 的实现
// 打印三个函数
// 好像这种类型强转 还是有点生疏啊
#include <iostream>
#include <cstdint> // for intptr_t
typedef void(*Func)(void);
class base{
public:
virtual