#include <iostream>  
using namespace std;  class Base
{
public:
Base()
{
cout<<"Base"<<endl;
};
~Base()
{
cout<<"~Base"<<endl;
};
public:
virtual void fun1(){cout<<"from base fun"<<endl; };
};class derived: public Base
{
public:
derived()
{
cout<<"derived"<<endl;
};
~derived()
{
cout<<"~derived"<<endl;
};
public:
virtual void fun1(){cout<<"from derived fun"<<endl;};};int main()
{
{
Base* pDerived = new derived();
pDerived->fun1();
delete pDerived;
}
system("pause");   
}
-----------------------------
运行结果:
Base
derived
from derived fun
~Base我的问题是为什么没有调用~derived()??这样做是不是造成了内存的泄漏??该怎么正确调用?

解决方案 »

  1.   

    int main()
    {
    {
    derived* pDerived = new derived(); ///试试
    pDerived->fun1();
    delete pDerived;
    }
    system("pause");   
    }
      

  2.   

    确实是有内存泄漏的。这也就是书上说的,最好把基类的析构函数声明为virtual的好处了。
    ~Base() = > virtual ~Base()
      

  3.   

    的确呀,需要用到基类指针作析构,基类的析构函数要声明为virtual
      

  4.   

    将基类的析构函数声明为virtual就可以了。
      

  5.   

    将基类的析构函数声明为virtual
      

  6.   

    基础,析构要写成虚方法
    建议看 深度探索c++对象模型 和 高质量C、C++编程指南
      

  7.   

    LiChenYue(卐)(李忱悦)(怎堪蔑拒?鳄泪横流㊣暗恋未遂!独孤求偶) ( ) 信誉:100    Blog  2007-03-07 22:29:59  得分: 0  
       虚继承。
    =============================================================================
    虚继承? LichengYue弄错了吧, 虚继承和这个是没有关系的啊. 虚函数 <> 虚继承啊, 不能误导哦.
      

  8.   

    虚继承?,虚继承是防止多继承构造同个基类使用的,虚函数 <> 虚继承啊, 不能误导哦.