Tag: 虚拟函数

在C ++中使用接口的性能损失?

在C ++中使用接口(抽象基类)时会有运行时性能损失吗?

虚拟函数和vtable如何实现?

我们都知道C ++中的虚函数是什么,但是它们是如何实现的呢? vtable可以修改,甚至可以直接在运行时访问吗? 这个vtable是否存在于所有的类,或者只有那些至less有一个虚函数的类? 抽象类是否至less有一个条目的函数指针是NULL? 单个虚拟function是否会减慢整个class级的速度? 或者只有对虚拟函数的调用? 如果虚拟函数被实际覆盖,速度会受到影响,或者只要虚拟函数没有效果,速度会受到影响。

“纯虚函数调用”崩溃从何而来?

我有时会注意到程序在我的电脑上出现错误:“纯虚函数调用”。 当一个对象不能创build一个抽象类时,这些程序如何编译?

为什么C#默认将方法实现为非虚拟的?

与Java不同,为什么C#默认将方法视为非虚函数? 是否更可能成为绩效问题而不是其他可能的结果? 我想起了从Anders Hejlsberg那里读到一段关于现有架构带来的几个优点。 但是,副作用呢? 默认情况下有非虚拟方法真的是一个很好的权衡?

内联虚函数真的是无意义的吗?

当我收到一个代码评论评论,说虚拟function不需要内联时,我得到了这个问题。 我认为内联虚函数可以在直接调用对象的场景中派上用场。 但是我想到的反驳是 – 为什么要定义虚拟然后使用对象来调用方法? 最好不要使用内联虚函数,因为它们几乎从来没有扩展? 我用于分析的代码片段: class Temp { public: virtual ~Temp() { } virtual void myVirtualFunction() const { cout<<"Temp::myVirtualFunction"<<endl; } }; class TempDerived : public Temp { public: void myVirtualFunction() const { cout<<"TempDerived::myVirtualFunction"<<endl; } }; int main(void) { TempDerived aDerivedObj; //Compiler thinks it's safe to expand the virtual functions aDerivedObj.myVirtualFunction(); //type of object […]