dynamic_cast <sibling *>(this)在析构函数中失败

时间:2016-03-11 20:15:07

标签: c++ multiple-inheritance mixins virtual-destructor

我正在编写一组混合类(Pre和Post),不,我不能使用虚拟继承。在Main :: Main()之前预先在构造函数中设置东西,并且在析构函数中对Post进行清理,因为Main :: ~Main():

class Post {
  public:
    virtual ~Post() {
    fprintf(stderr, "%p->%s\n", this, __PRETTY_FUNCTION__);
    Main *m = dynamic_cast<Main *>(this);
    assert(m != nullptr);
};
class Mixed : public Pre, public Main, public Post { };

但是当调用Mixed ::〜Mixed()时,它会调用Post :: ~Post,并且断言失败。为什么会这样,如何在Main :: ~Main()被调用之前创建一个可以进行清理的混合类?

注意:我可以在Post类中存储指向Main的指针,但这看起来很愚蠢。

0 个答案:

没有答案