dynamic_cast & lt; sibling * & gt; (this) завершается неудачно в деструкторе

Я пишу набор смешанных классов (Pre и Post) и нет, я не могу использовать виртуальное наследование. Pre устанавливает объекты в конструкторе до 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 ()?

Примечание: я мог бы хранить указатель на Main в классе Post, но это выглядит глупо.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]