gpt4 book ai didi

c++ - 从 C++ 派生类的析构函数调用虚函数

转载 作者:行者123 更新时间:2023-12-01 14:47:38 24 4
gpt4 key购买 nike

这是我的 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;
}

我了解到从构造函数或析构函数调用任何虚函数都是不可取的。
在派生类 B 的析构函数中,我调用名为“method()”的虚函数。

这是输出消息。
B::method
B::destructor
B::method
A::destructor

在我看来完全没有问题。虚函数知道它的对象类型并打印
“B::方法()”。这是一种应该避免的未定义行为吗?

最佳答案

从概念上讲 B 中的所有虚函数可以在析构函数体中访问,因此您的代码很好并且定义良好。

但是你的代码非常脆弱:如果有 B 的子类,那就是另一回事了。其中有 method被覆盖。在那种情况下写 B::method();B 的析构函数体中就足够了。

简短回答:最好避免在构造函数和析构函数中调用虚方法。

关于c++ - 从 C++ 派生类的析构函数调用虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62300380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com