【发布时间】:2012-02-02 15:28:39
【问题描述】:
我需要为基类Base 的所有后代声明终结方法finalize(),这应该在销毁期间调用,我的意图是从~Base() 调用纯virtual void Base::finalize() = 0,但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() 但问题是如何强制这样做。换句话说,我的问题是:是否有可能强制编写 Base 类的后代的人使用 finalizing 方法,嗯,以另一种方式而不是在文档中评论它? :)
【问题讨论】:
标签: c++ inheritance