Мне нужно объявить метод финализации finalize()
для всех потомков базового класса Base
, который должен вызываться во время уничтожения, и я намеревался вызвать pure virtual void Base::finalize() = 0
из ~Base()
, но c ++ запрещает такиевещь.Итак, мой вопрос
Как мы можем обязать потомков выполнять завершающую работу правильно и предварительно определенным образом?
Этот код не может быть скомпилирован:
#include <QDebug>
class Base {
public:
Base(){}
virtual ~Base(){
qDebug("deleting b");
finalize();
}
virtual void finalize() = 0;
};
class A : public Base
{
public:
A(){}
~A(){}
void finalize(){qDebug("called finalize in a");}
};
int main(int argc, char *argv[])
{
Base *b = new A;
delete b;
}
Если ясделать Base::finalize()
не чисто виртуальным, он вызывается из ~Base()
без отправки дочернему элементу, так как он уже уничтожен.
Я могу вызвать finalize () из деструктора ребенка, но вопрос в том, как заставить это сделать.Другими словами, мой вопрос: возможно ли заставить людей, которые будут писать потомков Базового класса, использовать метод финализации, ну, иначе, чем комментировать это в документации?:)