为什么构造函数不能是虚函数?
2014-04-15 22:32
302 查看
为什么构造函数不能是虚函数?这里需要明白一个概念,那就是虚函数表vtbl,每一个拥有虚函数成员函数的类都有一个指向虚函数表的指针。对象通过虚函数表里存储的函数地址来调用虚函数。
那虚函数表的指针是在什么时候初始化的呢?当然是构造函数。当我们通过new来创建一个对象的时候,第一步是申请需要的内存,第二部就是调用构造函数。试想,如果构造函数是虚函数,那么必然需要通过vtbl来找到虚函数的人口地址,显然,我们申请的内存还没有做任何初始化,不可能有vtbl的。因此,构造函数不能是虚函数。
摘自网络。
那虚函数表的指针是在什么时候初始化的呢?当然是构造函数。当我们通过new来创建一个对象的时候,第一步是申请需要的内存,第二部就是调用构造函数。试想,如果构造函数是虚函数,那么必然需要通过vtbl来找到虚函数的人口地址,显然,我们申请的内存还没有做任何初始化,不可能有vtbl的。因此,构造函数不能是虚函数。
摘自网络。
相关文章推荐
- 构造函数为什么不能是虚函数
- 构造函数为什么不能是虚函数
- 构造函数为什么不能是虚函数
- 为什么构造函数不能为虚函数
- 构造函数为什么不能是虚函数
- 为什么构造函数不能为虚函数
- 构造函数为什么不能是虚函数
- C++的构造函数为什么不能是虚函数
- 构造函数为什么不能是虚函数
- 为什么构造函数不能是虚函数
- 为什么构造函数不能声明为虚函数,析构函数可以
- 为什么构造函数不能声明为虚函数,析构函数可以
- 为什么构造函数不能声明为虚函数,析构函数可以
- 构造函数为什么不能为虚函数?
- 为什么构造函数不能是虚函数
- 为什么构造函数不能为虚函数
- 构造函数为什么不能是虚函数
- 为什么构造函数不能为虚函数
- 虚表解析以及构造函数为什么不能是虚函数
- 构造函数为什么不能为虚函数 & 基类的析构函数为什么要为虚函数