我正在编写一组混合类(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的指针,但这看起来很愚蠢。