您的位置:首页 > 其它

注册MS CRM Licenses 时需要注意的几个问题:

2010-04-20 17:34 183 查看
问:虚析构函数什么时候使用?
先看以下代码:
class A
{
public:
A(){}
~A()
{
cout<<"virtual function of class A"<<endl;
}
virtual void f()
{
cout<<"f() of class A"<<endl;
}
};

class B:public A
{
public:
B()
{
pInt = new int[10];
}
~B()
{
delete[] pInt;

cout<<"virtual function of class B"<<endl;
}

virtual void f()
{
cout<<"f() of class B"<<endl;
}
private:
int *pInt;
};

int main()
{
A *a = new B();
a->f();

delete a;

return 0;
}

执行结果:
f() of class B
virtual function of class A

从结果可以看出问题了吧!
造成的问题:~B没有被执行,pInt所占的内存不能得到释放,造成内存泄漏。

原因:a的声明类型为类A。

解决办法:将~A() 改成 virtual ~A()

更改后的执行结果:
f() of class B
virtual function of class B
virtual function of class A

那什么时候使用虚析构函数呢?
答:当类作为基类出现,同时基类中有虚函数时,最好将基类的析构函数作为虚函数。

虚析构函数和普通虚函数有点还有点不一样:虚析构函数会同时执行父类和子类的虚析构方法,但对普通虚函数,只会执行子类的虚函数。
从老师那里学来的...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: