此代码合法吗?
class Base1 {
};
class Base2 {
public:
virtual ~Base2() {
if (!dynamic_cast<Base1*>(this))
std::cout << "aaaa" << std::endl;
}
Base2() {
}
};
class MyClass: public Base1, public Base2 {
public:
MyClass() {
}
virtual ~MyClass() {
std::cout << "bbb" << std::endl;
}
};
int main() {
MyClass s;
return 0;
}
我看到了两个打印件,但我应该只看到一个。我猜动态转换是错误的。可以进行这种检查吗?
最佳答案
也许我自己找到了解决方案,但回答是否定的,这是不可能的:
从bullet 6 of cppreference.com documentation:
另请参阅标准的[class.cdtor]/6。
由于我要在Base2析构函数中强制转换为Base1,因此此行为是不确定的。
关于c++ - 析构函数中的动态转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59973782/