gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:48:06 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com