c++ - 在什么情况下给出一个纯虚函数的实现是有利的?

标签 c++ performance pure-virtual

在 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/

相关文章:

c++ - cmake 找不到 LibXml2

c++ - 定义带有 void* 参数的纯虚函数的抽象基类。派生类匹配参数是指向某种类型的指针

c++ - 为什么纯虚机制不考虑继承函数?

c++ - 纯虚拟类上的 DECLSPEC_NOVTABLE?

performance - AppleScript 最小化所有可见窗口的速度非常慢。如何加快速度?

Mysql/Mysqli/PDO 性能 - 我打印的表或表的数量

c++ - c/c++ 使用 else 代替 if not

C++模板类,具体情况如何声明拷贝构造函数?

C++ - 错误 :invalid initialization of reference of type 'const testGetter*&' from expression of type 'testGetter* const'

algorithm - 运行时间(空 for 循环与一条语句的 for 循环)