9得票4回答
Delphi中的COM方法偏移量

在Delphi中,如何查找COM方法的地址?我可以硬编码偏移量。 //0 is the offset of the QueryInterface method p := TPonterArray(pointer(SomeInterface)^)[0]; 但我更愿意使用符号名称。以下显然不...

9得票3回答
C++中的继承成本

以以下片段为例: 以以下片段为例: struct Foo { typedef int type; }; class Bar : private Foo { }; class Baz { }; 正如您所看到的,这种关系中不存在虚函数。既然如此,那么以下假设在语言方面是否准确? ...

9得票2回答
如何使用G++禁止为纯虚类生成C++ vtable?

在MSVC中,可以使用__declspec(novtable)属性来抑制C++虚函数表的生成。然而,似乎GNU C++编译器没有相应的属性。事实上,将纯虚类的虚函数表留下会不必要地链接__cxa_abort()等其他内容,我想避免这种情况发生,因为我正在为嵌入式系统编程。那么,我该怎么办呢? ...

9得票3回答
覆盖虚方法时缺少返回类型协变的解决方法

有没有办法在C#中“黑客”或“强制执行”协变重写?例如: public class Alpha { public virtual Alpha DoSomething() { return AlphaFactory.GetAlphaFromSomewhere(); ...

9得票1回答
如何使用dynamic cast检测指针的删除

如这里所示,可以使用dynamic_cast检测已删除的指针: #include <iostream> using namespace std; class A { public: A() {} virtual ~A() {} }; class B : publ...

9得票5回答
C++中的虚表指针是在什么时候为一个对象设置的?

我知道对于任何具有虚函数或派生自具有虚函数的类,编译器会做两件事。首先,它为该类创建虚表;其次,在对象的基本部分中放置一个虚指针(vptr)。在运行时,当对象被实例化时,vptr被分配并开始指向正确的虚表。 我的问题是,在实例化过程中到底在什么地方设置了这个vptr?这个vptr的赋值是在对...

9得票4回答
如何摆脱虚拟表?密封类

据我所知,将类设为sealed会消除VTable中的查找,我是否正确?如果我将一个类设为sealed,这是否意味着类层次结构中的所有虚方法也被标记为sealed? 例如: public class A { protected virtual void M() { ........ ...

8得票5回答
虚表和_vptr存储方案

有人能解释一下不同类的虚拟表是如何存储在内存中的吗?当我们使用指针调用函数时,它们如何使用地址位置来调用函数?我们可以使用类指针获取这些虚拟表内存分配大小吗?我想看看一个类的虚拟表使用了多少内存块。我该如何查看? class Base { public: FunctionPointe...

8得票1回答
非多态类型上的dynamic_cast

我能理解为什么在这种情况下 dynamic_cast 起作用: #include <iostream> struct A{ virtual ~A() = default; }; struct B { virtual ~B() = default; }; st...

8得票4回答
C++中的纯虚函数位于哪里?

纯虚函数位于哪个虚表中?是在基类还是派生类中? 例如,每个类中的虚表是什么样子的? class Base { virtual void f() =0; virtual void g(); } class Derived: public Base{ virtual voi...