virtual-functions相关内容

在C ++类中有一个虚方法的性能成本是多少?

在C ++类(或其任何父类)中至少有一个虚方法意味着该类将有一个虚表,每个实例都有一个虚指针。 所以内存成本是很清楚的。最重要的是实例上的内存成本(特别是如果实例很小,例如,如果它们只是包含一个整数):在这种情况下,在每个实例中有一个虚拟指针可能会加倍实例的大小。虚拟表使用的内存空间,我想这相对于实际方法代码占用的空间通常是可以忽略的。 这给我的问题:是否有一个可衡量的性能成本(即速度 ..
发布时间:2016-10-11 22:10:11 C/C++开发

在什么地方“纯虚拟函数调用”崩溃来自?

我有时会注意到程序在我的电脑上崩溃时出现错误:“纯虚函数调用”。 这些程序在无法创建对象时一个抽象类? 解决方案 如果你尝试从构造函数或析构函数调用虚函数,因为你不能从构造函数或析构函数中调用虚函数(派生类对象没有被构造或者已经被销毁),它调用基类版本,在纯虚函数的情况下,不存在。 (请参阅实时演示此处) class Base { public: Base(){ ..
发布时间:2016-10-11 22:09:26 C/C++开发

虚拟赋值运算符C ++

C ++中的赋值运算符可以是虚拟的。为什么需要它?我们可以让其他操作符也是虚拟的吗? 解决方案 赋值运算符不需要被虚拟。 下面的讨论是关于 operator = ,但它也适用于任何运算符重载的类型 下面的讨论表明,virtual关键字不知道关于找到匹配函数的参数的继承签名。在最后的例子中,它显示了如何在处理继承类型时正确处理赋值。 虚函数不知道参数的继承: 函数的签 ..
发布时间:2016-10-11 21:44:07 C/C++开发

为什么我们在C ++中没有虚拟构造函数?

为什么C ++没有虚拟构造函数? 解决方案 来自Bjarne Stroustrup的C ++风格和技术常见问题 为什么我们没有虚拟构造函数? 虚拟调用是一种机制, $ b信息。特别是,“虚拟”允许我们仅仅知道任何接口而不知道对象的确切类型来调用函数 。要 创建一个对象,你需要完整的信息。特别是,你 需要知道你想要创建的确切类型。因此, a“对构造函数的调用”不能是虚拟的 ..
发布时间:2016-10-11 21:20:05 C/C++开发

C ++虚函数返回类型

继承类可能实现一个具有不同返回类型的虚函数(不使用模板作为返回)? 解决方案 在某些情况下,是的,只要返回类型与原始返回类型是 covariant ,派生类就使用不同的返回类型来覆盖虚函数是合法的。例如,考虑以下: class Base { public: virtual〜Base } virtual Base * clone()const = 0; }; c ..
发布时间:2016-10-11 21:16:58 C/C++开发

虚拟函数和性能 - C ++

在我的类设计中,我广泛使用抽象类和虚拟函数。我有一种感觉,虚拟功能影响性能。这是真的?但我认为这种性能差异不明显,看起来像我做过早优化。对吗? 解决方案 一个好的经验法则是: 这不是一个性能问题,直到你可以证明。 使用虚拟函数将有一个非常轻微的对性能的影响,但不会影响应用程序的整体性能。更好的地方寻找性能改进是在算法和I / O。 一个很好的文章谈论虚拟函数(和更多)是 ..
发布时间:2016-10-11 21:15:37 C/C++开发

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

我收到这个问题,当我收到一个代码审查意见,说虚拟功能不需要内联。 我认为内联虚拟函数可以派上用场直接调用对象的函数。但是我的反对意见是 - 为什么要定义虚拟然后使用对象来调用方法? 最好不要使用内联虚拟 我用于分析的代码段: class Temp { public: virtual〜Temp() { } virtual void myVirtualFun ..
发布时间:2016-10-11 20:14:35 C/C++开发

一个C ++类的成员函数模板可以是虚拟的吗?

我听说C ++类的成员函数模板不能是虚拟的。这是真的? 如果它们可以是虚拟的,那么什么是使用这样的函数的场景的示例? 解决方案 模板都是关于编译器在编译时生成代码的。虚拟函数都是关于运行时系统确定在运行时调用的函数。 一旦运行时系统确定需要调用模板化的虚拟函数,编译就完成了,编译器不能再生成相应的实例了。因此,您不能有虚拟成员函数模板。 但是,有一些强大而有趣的技术源于组 ..
发布时间:2016-10-11 19:57:37 C/C++开发

为什么我们需要C ++中的虚拟函数?

我正在学习C ++,我正在学习虚拟函数。 根据我在书中和在线阅读,虚函数 但在本书的前面,当学习基本继承时,我能够重写派生类中的基函数没有使用 virtual 的类。 我知道有更多的虚拟函数,它似乎是重要的,所以我想清楚它是什么。我只是在网上找不到一个直接的答案。 解决方案 我是一个C ++新手自己,但这里是我的理解不仅仅是什么虚拟函数,而是为什么它们是必需的: 让 ..
发布时间:2016-10-11 19:52:58 C/C++开发

如何从C ++ DLL动态加载C#DLL

我有一个C ++应用程序。这支持用户的C ++插件的DLL,它会动态加载DLL这些的,然后能够动态地创建和使用用户的类型。这些用户类型从基本类型和主要应用程序的核心库定义的接口派生,所以我认为用户对象为指针的基类,并调用用户的虚拟功能,使他们的魔术发生。 现在我想扩展插件DLL的允许托管DLL的(我关心C#居多)。我希望所有的同魔术在C#中的插件DLL的发生。 我如何动态加载这些dll ..
发布时间:2016-09-26 12:29:37 C#/.NET

是什么使得一个虚拟的方法的危险?

我一直在做一些嘲讽与RhinoMocks的,它需要嘲笑方法进行虚拟。这很好,除了我们有一个自定义的框架,其中包含我想嘲笑这是目前没有标记为虚拟的方法。 我无法预见作出任何问题这些方法虚拟,但我想知道什么是制作方式的虚拟,我应该去寻找一些潜在的危险? 解决方案 其实这可能会遇到很多问题,如果该方法的目的不是要被重写,有人将其覆盖。特别是,从来没有叫从构造一个虚拟的方法。试想一下: ..
发布时间:2016-09-19 13:51:40 C#/.NET

在C#中的虚函数的实际应用

的虚函数的实际使用什么在C#? 解决方案 所以基本上,如果你的祖先类 你想为一个方法有一定的行为。如果你的后代使用相同的方法,但有不同的实现,您可以替换它,如果它有一个虚拟关键字。 使用系统; 类识别TestClass { 公共类尺寸 { 公共常量双PI = Math.PI; 保护双X,Y; 公共尺寸() { } ..
发布时间:2016-08-26 22:17:50 C#/.NET

为什么C#接口中的方法不声明抽象的或虚拟的?

在接口 C#方法声明不使用虚拟关键字,并且无需使用覆盖关键字。 有一个原因?我认为这只是一门语言的便利,明明CLR知道如何盖(方法是不是默认虚拟)下处理这个问题,但是否有其他技术原因? 下面是IL派生类生成: 类示例:IDisposable的{ 公共无效的Dispose(){} }市民。方法hidebysig newslot虚拟决赛 例如无效的Dispose()CI ..
发布时间:2016-08-26 15:36:30 C#/.NET

在构造函数中的虚拟成员调用

我碰到ReSharper的有关从我的对象构造一个虚拟成员的呼叫警告。为什么会变成这样的东西不要做? 解决方案 (假设你在C#写在这里) 在C#编写的一个对象被构造,会发生什么情况是,初始化为了从最派生类的基类中运行,然后从基类最派生类,以构造运行( ..
发布时间:2016-08-26 13:54:00 C#/.NET

为什么派生类没有虚函数表指针代替虚函数表的基类的?

我感兴趣的是纯C的虚函数的实现下面的执行情况进行例子。然后派生类的通过一个指向基类的虚拟函数表的执行。为什么派生类没有虚函数表的指针,而使用虚函数表的基类。也许是因为它们是相同的偏移 无效myClassDerived_ctor(结构myClassDerived *本) { myClassBase_ctor(安培;这 - >基地); 这 - > base.vtable ..
发布时间:2016-08-22 15:35:52 C/C++开发

为什么C#实现方法作为非虚默认?

与Java不同,为什么C#的治疗方法,因为默认情况下非虚函数?是它更可能是一个性能问题,而不是其它可能的结果 我想起读取安德斯Hejlsberg为约几个优点现有的架构带来了一个段落。但是,有什么副作用?难道真的是一个很好的权衡有非虚方法在默认情况下? 解决方案 类应该的设计的继承,以便能够利用它的优势。有方法虚拟默认情况下,意味着在类中的每个功能可以拔出,取而代之的是另一种,这是不是一个真正 ..
发布时间:2015-11-24 11:45:54 Java开发