派生类的析构函数什么情况下会被调用?
为什么基类的析构函数不为虚的话,基类指针指向子类对象,删除对象时,派生类的析构函数就不会被调用?
我看到的解释就是如果基类析构函数不是虚函数,Base *d = new Derived(); 这样定义的d在析构的时候只会调用Base自己的析构函数,delete d; 运行的时候,Derived自己的数据成员不会被销毁,造成内存泄漏。
这是为什么呢?为什么可以调用子类的构造函数却不能调用子类的析构函数,这种规则不理解,析构函数到底在什么情况下才一定会被调用?