Мне нужно объявить метод завершения finalize ()
для всех потомков базового класса Base
, который должен вызываться во время уничтожения, и я намеревался вызвать чистую 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 () из дочернего деструктора, но вопрос в том, как заставить это сделать. Другими словами, мой вопрос: можно ли обязать людей, которые будут писать потомков базового класса, использовать метод финализации, ну, иначе, чем комментируя его в документации? :)