在 C++ 中,给出纯虚函数的实现是合法的:
class C
{
public:
virtual int f() = 0;
};
int C::f()
{
return 0;
}
你为什么要这样做?
相关问题:C++ faq lite包含一个例子:
class Funct {
public:
virtual int doit(int x) = 0;
virtual ~Funct() = 0;
};
inline Funct::~Funct() { } // defined even though it's pure virtual; it's faster this way; trust me
我不明白为什么析构函数被声明为纯虚拟然后实现;我不明白为什么这应该更快的评论。
最佳答案
必须始终实现已声明的析构函数,因为实现会将它们作为派生对象销毁的一部分调用。
如果它们提供有用的通用功能但总是需要专门化,则可以实现其他纯虚函数。在这种情况下,派生类实现通常会显式调用基础实现:
void Derived::f()
{
Base::f();
// Other Derived specific functionality
}
通常,如果您需要将类抽象化(即防止创建非派生实例),则将析构函数设为虚拟,但该类没有其他自然纯虚拟的函数。我认为“相信我,它更快”是指这样一个事实,即由于作为派生对象清理的一部分调用的析构函数不需要使用 vtable 查找机制,因此可以利用内联实现,这与典型的虚函数调用不同.
关于c++ - 在什么情况下给出一个纯虚函数的实现是有利的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/977543/