[英]Calling a virtual function from a destructor of a derived class in c++
这是我的 c++ 代码片段
class A {
public:
virtual void method() {
cout << "A::method" << endl;
}
virtual ~A() {
cout << "A::destructor" << endl;
}
};
class B : public A {
public:
virtual void method() {
cout << "B::method" << endl;
}
virtual ~B() {
cout << "B::destructor" << endl;
method();
}
};
int _tmain()
{
A* a = new B();
a->method();
delete a;
return 0;
}
我了解到从构造函数或析构函数调用任何虚函数是不可取的。 在派生的 class B 的析构函数中,我调用名为“method()”的虚拟 function。
这是 output 消息。
B::method
B::destructor
B::method
A::destructor
在我看来完全没有问题。 虚拟 function 知道其 object 类型并打印“B::method()”。 这是一种应该避免的未定义行为吗?
从概念上讲, B
中的所有虚函数都可以在析构函数体中访问,因此您的代码很好并且定义良好。
但是您的代码非常脆弱:如果有一个B
的子 class 的method
被覆盖,那将是另一回事。 在这种情况下,写B::method();
在B
的析构函数体中就足够了。
简短的回答:最好避免在构造函数和析构函数中调用虚方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.