荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Dreamer (我与萤火虫), 信区: SoftDev
标  题: 【C++】[FAQ]为何析构函数不是默认为虚?
发信站: 荔园晨风BBS站 (Tue Jun  8 13:29:14 2004), 站内信件


Q: 为何析构函数不是默认为虚?
A: 哈,你大概知道我要说什么了 :O) 仍然是因为——许多类不是被用来做基类的
。只有在类被作为interface使用时虚函数才有意义。(这样的类常常在内存堆上
实例化对象并通过指针或引用访问。)
那么,何时我该让析构函数为虚呢?哦,答案是——当类有其它虚函数的时候,你
就应该让析构函数为虚。有其它虚函数,就意味着这个类要被继承,就意味着它有
点“interface”的味道了。这样一来,程序员就可能会以基类指针来指向由它的
继承类所实例化而来的对象,而能否通过基类指针来正常释放这样的对象就要看析
构函数是否为虚了。 例如:

class Base {
// ...
virtual ~Base();
};

class Derived : public Base {
// ...
~Derived();
};

void f()
{
Base* p = new Derived;
delete p; // virtual destructor used to ensure that ~Derived is called
}


如果Base的析构函数不是虚的,那么Derived的析构函数就不会被调用——这常常
会带来恶果:比如,Derived中分配的资源没有被释放。






--
如果你真的爱萤火虫,你就不应该将她困在瓶子里;
如果你真的爱萤火虫,你应该放开她,让她在天空中自由自在地飞!
虽然你会不舍得她,但是最终你就会明白这样你才真正拥有了她!

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.223]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店