#include<iostream.h>
class A
{
public:
~A()
{
cout<<"This is A";
}
};class B:public A
{
public:
virtual ~B()
{
cout<<"This is B";
}
};void main()
{
A *a=new B;
delete a;
}
class A
{
public:
~A()
{
cout<<"This is A";
}
};class B:public A
{
public:
virtual ~B()
{
cout<<"This is B";
}
};void main()
{
A *a=new B;
delete a;
}
delete (B*)a;
就不会错了。或者,要使用虚函数实现动态创建和销毁:
class A
{
public:
~A()
{
cout<<"This is A";
}
virtual void Destroy() {delete this;}
};class B:public A
{
public:
virtual ~B()
{
cout<<"This is B";
}
void Destroy() {delete this;}
};int _tmain(int argc, _TCHAR* argv[])
{
A *a=new B;
//delete (B*)a;
a->Destroy();
}
class A
{
public:
virtual ~A()
{
cout<<"This is A";
}
virtual void Destroy() {delete this;}
};class B:public A
{
public:
virtual ~B() //这里是不是virtual没有关系
{
cout<<"This is B";
}
void Destroy() {delete this;}
};int _tmain(int argc, _TCHAR* argv[])
{
A *a=new B;
delete a;
}