首页
社区
课程
招聘
[求助]C++的类是否一定有构造函数?
2012-2-22 17:19 4678

[求助]C++的类是否一定有构造函数?

2012-2-22 17:19
4678
在之前的时候看到书上说的是,如果我们不提供构造函数,那么编译器会为类提供默认构造函数。于是做了以下实验:
class B
{
};

int main()
{
   B b;
}

就是B类没有任何内容,在main函数中创建一个B的对象b。
在vc6中对这一段进行反汇编,看到的结果是在创建b对象的时候,没有call,应该就是没有调用构造函数。而如果在class B中加入内容,创建的时候是有call的。这是第一个。

第二个是现在输出sizeof(b),得到的是1,如果class B中有两个int型变量,sizeof(B)输出为8.在没有内容的时候,输出的1是什么所占的?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
无聊的菜鸟 9 2012-2-22 18:03
2
0
说明B的存在感?
雪    币: 678
活跃值: (101)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
StudyRush 3 2012-2-22 18:10
3
0
B对象在内存中要有一个唯一的地址。所以好像就是空类就是只占一个字节。这些可以在《高质量编程指南》有讲解。估计《深度探索C++对象模型》也有。
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
cntrump 13 2012-2-22 19:00
4
0
看编译器的实现,这个标准C++里没有说明的。
编译器看怎么实现都可以。

貌似 gcc 中,是零。
雪    币: 57
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
CaiHuan 2012-2-22 19:31
5
0
+1...这个有反汇编看过...确实有1个字节..不然这个对象不存在了...
雪    币: 53
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
morphling 1 2012-2-23 09:54
6
0
用gcc编译试了一下,也是1,如果提供了一个空的构造函数,在反汇编也会看到call,这样应该是没有提供构造函数么?
雪    币: 150
活跃值: (116)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
乱乱 1 2012-2-23 11:45
7
0
需要时会合成
如果是lz提供的代码的话,不会合成。
雪    币: 27
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cooljuly 2012-2-23 12:35
8
0
1.如果类没有提供构造函数,并没有什么默认的构造函数出现。
2.sizeof(空类)为 1,是因为需要为对象提供取地址的操作。
游客
登录 | 注册 方可回帖
返回