问个关于虚析构函数有关问题,不是很懂

问个关于虚析构函数问题,不是很懂结果不是很明白,首先这里调用了Devired的析构函数,证明那个new Derived (

问个关于虚析构函数问题,不是很懂



结果不是很明白,首先这里调用了Devired的析构函数,证明那个new Derived ();调用了Derived的构造函数,new不是开辟了用来存储后面数类型的空间,然后返回地址给左边那个吗,为什么还要初始化的(现在看国产书,没说);
还有,既然那个virtual~Base();是虚的,那应该只调用~Derived()啊,为什么后来还调用了~Base();
大神出来吧!我是新手! 类 C++ 程序 析构 虚函数
[解决办法]
参考:http://blog.csdn.net/songthin/article/details/1703966
new分三步:动态开辟空间,调用构造函数,返回对应指针

因为~Drived()只析构子类的部分,还要~Base()来析构继承父类的部分.和构造函数正好顺序相反。
[解决办法]
基类应具有析构函数,以保证在删除指向动态分配对象的指针时,根据指针实际指向的对象所属的类型运行适当的析构函数。
上述代码中,将基类的析构函数定义为虚函数,这使得在delete指向派生类对象的指针时首先调用派生类的析构函数,再调用基类的析构函数,从而实现完整释放。
若不定义为虚函数,则存在内存未完全delete的问题。
[解决办法]
虚析构函数,是用在多态上的,用了来保证,delete 基类指针指向的派生类对象时,能够正确析构子类对象的。delete 会调用 析构函数 
比如
class Base{
virtual ~Base(){};//<==> virtual void dtor(){};

};
class Derived{
virtual ~Derived(){}; //<==>virtual void dtor(){};
}

Base *pBase =new Derived;
delete pBase;//<==>{ pBase->detor(); operator delete(pBase);}
               <==> {pBase->~Derived();operator delete(pBase);}  


PS:
派生类对象析构时,会自动调用,基类对象的,析构函数--在子类析构函数,内部的代码,执行完成以后。

可以把析构函数看成是,特殊的重载函数,虽然函数名称不同。

这样在虚函数表中,派生类的析构函数,和父类的析构函数的位置,是相同的;
派生类对象的,虚函数表里的,析构函数位置,存放的是派生类的,析构函数。

所以 delete时, 通过定义,虚析构函数,如果基类指针,指向派生类对象的话,会调用派生类的析构函数。
派生类的析构函数结束时,会调用基类的析构函数;

派生类对象,和相应的基类对象,都得以析构。

如果不是虚析构函数,delete时,会直接析构基类对象,导致派生类对象的,派生类定义部分,没有析构。
产生不能完全析构的错误。