- 从概念上理解,所谓“虚函数”,就是在编译期不能知道函数入口,只有在运行期才能通过 vptr 查找虚函数表才能得到。这个 vptr 的存放位置在哪里?唯一可能的实现方案,就是放在对象的内存空间中。因为在对象存在之前,这个 vptr 是不可知的;在对象存在之后,这个 vptr 是确知的。即使放在全局区(类 static 空间),在对象存在之前 vptr 又不能确知,没有意义。
- 所谓“构造函数”,就是对象构造时,需要调用的函数。
那么矛盾来了:一个对象构造时,需要通过 vptr 查找对应的构造函数;但是由于这个对象还没有构造,vptr 还不存在。
所以,构造函数不能是虚函数。
其他参考


