此代码合法吗?

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/

10-11 17:45