CATEGORY / Development

严重避免在构造/析构过程中调用虚函数

Permanent Link: http://wutiam.net/notes/123

之前只知道在 C++ 的构造器中,调用虚函数(非纯虚函数)不会出现多态的情况,却想当然认为既然析构器可以被声明为虚“函数”,那么析构器应该是能实现虚函数调用的的多态结果的。
事实证明,我又被蒙骗了!

构造器/析构器不会在调用虚函数时执行子类的重载实现,而且更危险的是当构造器/析构器“间接地”调用了虚函数(例如调用了一个非虚函数,但这个函数里调用了虚函数),不仅子类的重载实现不会被执行,而且还很难发现这种 bug。

所以,切记,切忌在构造器/析构器中直接或间接地调用任何虚函数!(单是在构造器/析构器中直接或间接地调用其他对象的虚函数并不受影响)

No Comments / Trackbacks / Pingbacks

Leave a Reply

:) :wink: 8-O :lol: :-D 8) :-| :mrgreen: :oops: :-o :-? :( :twisted: :cry: more »