原文:构造函数为什么不能为虚函数 & 基类的析构函数为什么要为虚函数

一 构造函数为什么不能为虚函数 . 从存储空间角度,虚函数相应一个指向vtable虚函数表的指针,这大家都知道,但是这个指向vtable的指针事实上是存储在对象的内存空间的。问题出来了,假设构造函数是虚的,就须要通过 vtable来调用,但是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢 所以构造函数不能是虚函数。 . 从使用角度,虚函数主要用于在信息不全的情况下,能使重载的函数得 ...

2014-10-08 15:41 0 3998 推荐指数:

查看详情

为什么构造函数能为函数,而析构函数可以为函数

1. 构造函数为什么不能为函数? a. 存储空间角度: 函数的调用需要函数表指针,而该指针存放在对象的内容空间中,需要调用构造函数才可以创建他的值,否则即使开辟了空间,则虚表指针为随机值,不会找到构造函数;若构造函数声明为函数,那么由于对象还未创建,还没有内存空间 ...

Mon Oct 20 00:10:00 CST 2014 0 4104
构造函数析构函数能是函数吗?

1. 为什么构造函数能为函数函数的调用需要函数表指针,而该指针存放在对象的内容空间中;若构造函数声明为函数,那么由于对象还未创建,还没有内存空间,更没有函数表地址用来调用函数——构造函数了。 2. 为什么析构函数可以为函数,如果不设为函数 ...

Thu Sep 21 03:42:00 CST 2017 0 1523
为什么基类析构函数函数

注:本文章内容大部分来自网站整理。 1.为什么基类析构函数函数?   在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。   下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html ...

Wed Jul 11 00:06:00 CST 2012 0 5171
构造函数为什么不能声明为函数析构函数为什么要声明为函数

多态中的函数表是在运行时创建的还是编译时创建的? 答:函数表在编译的时候就确定了,而类对象的函数指针vptr是在运行阶段确定的,这是实现多态的关键 (类的函数的调用并不是在编译时就确定的,而是在运行时才确定的,由于编写代码的时候并不能确定被调用的是基类函数还是哪个派生类的函数,所以声明 ...

Wed Oct 31 20:07:00 CST 2018 0 1311
C++析构函数为什么要为函数

基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类析构函数,这样整个派生类的对象完全被释放。如果析构函数不被声明成函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类析构函数而不调 ...

Tue Oct 11 07:12:00 CST 2016 0 5959
C++析构函数为什么要为函数

注:本文内容来源于zhice163博文,感谢作者的整理。 1.为什么基类析构函数函数?   在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。   下面转自网络:源地址 http://blog.sina.com.cn/s ...

Fri Jul 13 18:12:00 CST 2012 9 77160
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM