C++支持通过虚拟机制进行动态绑定.但据我所知,虚拟机制是编译器的实现细节,标准只是指定了在特定场景下应该发生的行为.大多数编译器通过虚拟表和虚拟指针实现虚拟机制.是的,我知道这是如何工作的,所以我的问题不是关于虚拟指针和表的实现细节.我的问题是:
sizeof只有一个虚函数的任何类的将是一个指针(vptr的内部尺寸this)上编译,所以考虑到虚拟PTR和TBL机制本身是编译器实现,将这个说法我在上面做永远是真的吗?在这个问题之后,我想知道为什么C++中的struct\class必须有一个虚方法才能变成多态.
强制虚拟析构函数是有道理的,但如果根本没有析构函数,为什么要使用虚方法呢?
我有一个受版本控制(git)的visual studio 2008数据库项目.当我尝试合并我的分支时,我在project_name.dat中遇到冲突.
所以我的问题是:
如果我创建一个非常简单的类,如下所示:
class A
{
public :
virtual void foo()
{
}
};
Run Code Online (Sandbox Code Playgroud)
(没有虚拟析构函数)是编译器要创建vtable吗?或者现代编译器是否足够聪明以识别这种情况(可能是一个糟糕的复制和粘贴)而不是为这些类添加虚拟表?