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

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

2012-2-22 17:19
5292
在之前的时候看到书上说的是,如果我们不提供构造函数,那么编译器会为类提供默认构造函数。于是做了以下实验:
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是什么所占的?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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

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