在多态中我们知道一个最基本使用方法,就是使用基类的指针指向子类,当我们只想在程序使用,不用管具体的计算等细节,可以通过Factory函数,返回一个指针指向一个对象,factory函数会返回一个base类的指针,那么这个derived对象将会存在于heap之中,那么我们该如何释放这个在heap中内存?
class TimeKeeper
{
public:
TimeKeeper();
~TimeKeeper();
}
class AtomicClock :public TimeKeeper{......}
TimeKeeper *getTimeKeeper();
TimeKeeper *ptk=getTimeKeeper();
delete ptk;
我们知道依赖于客户delete动作,基本上会有某种错误的倾向,需要通过base class 来释放这个heap里面的内存,同事这个base class 有一个no-virtual的析构函数,这个时候通过base class 来释放dervied class不可取的,实际上derived 成分 没有被销毁,解决的办法就是给base class 加一个virtual 的析构函数。
通过我们实现多态是为了在运行时决定调用那个函数,当类中出现类virtual 函数之后,这个类的就多了一个vptr,这个虚指针指向一个虚表,但是无端将所有的析构函数声明为virtual ,将会带来不必要的内存消耗,许多人的心得是:只当class 内至少一个virtual函数的时候,就把析构函数声明为virtual。