问题描述——析构函数相关
定义一个基类和两个派生类:
class Time { // 基类
public:
Time();
~Time();
...
};
class Clock: public Time {...};
class Watch: public Time {...};
设计一个工厂函数:
啥叫工厂函数:返回一个基类的指针,指向一个新生成的派生类对象。为啥要用工厂函数:使用者不关心实现细节,只想使用时间。
Time* getTime(); // 指向的是Time类派生的动态分配对象
使用这个工厂函数:
Time* ptr = getTime(); // 获取动态分配对象
...
delete ptr; // 注意要释放
问题来了:
现状是,一个派生类的对象,通过一个基类的指针delete,这样可能造成,这个对象的派生成分(如clock类里的变量)没有被销毁,而基类的成分被销毁。
解决办法—— 将基类里的析构函数变为虚的(virtual)
virtual ~Time();
引申出的应用:
有一