【发布时间】:2020-05-15 08:18:16
【问题描述】:
这段代码合法吗?
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;
}
我看到两张照片,但我应该只看到一张。我猜动态演员是错误的。可以做这样的检查吗?
【问题讨论】:
-
您能澄清一下您要检查的内容吗? Base2 是否想知道它是否是也具有 Base1 的派生类的基础?
-
是的,我想检查 Base2 是否“this”也是 base1 的子节点
-
“但我应该只看到一个”为什么?为什么你对合法性有怀疑?
-
@greywolf82 哦,对不起,我错过了
! -
dynamic_cast在构造函数和析构函数中的行为是否不同?
标签: c++ polymorphism destructor multiple-inheritance dynamic-cast