如果类被设计成能被继承,析构函数必须是虚函数。否则可以不为虚函数。析构函数写成虚函数主要是为了在实现多态时不造成内存泄露。
class A
{
public:
A() {cout<<"A Constructor\n";}
virtual ~A() {cout<<"A Destructor\n";}
};
class B:public A
{
public:
B() { cout<<"B Constructor\n";}
~B() { cout<<"B Destructor\n";}
};
int main()
{
A *pa=new B();
delete pa;
return 0;
} A Constructor
B Constructor
B Destructor
A Destructor
如果不是虚析构的
class A
{
public:
A() {cout<<"A Constructor\n";}
~A() {cout<<"A Destructor\n";}
};
class B:public A
{
public:
B() { cout<<"B Constructor\n";}
~B() { cout<<"B Destructor\n";}
};
int main()
{
A *pa=new B();
delete pa;
return 0;
} A Constructor
B Constructor
A Destructor
造成了内存泄露
本文探讨了在C++中,基类的析构函数为何应当声明为虚函数,特别是在涉及多态的情况下。通过示例对比了虚析构与非虚析构在内存释放过程中的不同行为,解释了虚析构如何避免内存泄漏。
500

被折叠的 条评论
为什么被折叠?



