问下关于类的东西

s8232642 2011-03-14 02:23:43
1. 一个空类占几个字节?为什么
2. 一个类里面只有一个成员函数,占几个字节?为什么
3. 一个类里面只有一个虚函数,占几个字节?为什么?
4. 为什么基类析构函数一般都是虚函数?
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LinuxBirdMan 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pathuang68 的回复:]
引用 1 楼 linuxbirdman 的回复:

1)如果没虚函数则1字节,有则4字节。。。class B;b[10];这样能区分每个元素
2)1字节
3) 4字节
4)便于继承的时候,基类对象的析构

个人觉得第4个回答,有点问题。
比如有两个类base(基类)和derived(派生类),如果base中的析构函数非虚,那么

C/C++ code

base *b = ……
[/Quote]
没表达清楚。。就是你这个意思。。
辛鹤 2011-03-14
  • 打赏
  • 举报
回复
1)如果没虚函数则1字节,有则4字节。。。class B;b[10];这样能区分每个元素
2)1字节
3) 4字节
4)便于继承的时候,基类对象的析构
quwei197874 2011-03-14
  • 打赏
  • 举报
回复
如果想详细了解请看<inside c++对象模型>这本书,哈哈,书名可能有点出入.
pathuang68 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 linuxbirdman 的回复:]

1)如果没虚函数则1字节,有则4字节。。。class B;b[10];这样能区分每个元素
2)1字节
3) 4字节
4)便于继承的时候,基类对象的析构
[/Quote]
个人觉得第4个回答,有点问题。
比如有两个类base(基类)和derived(派生类),如果base中的析构函数非虚,那么

base *b = new derived;
delete b;

derived的析构函数将不会被调用,从而发生内存泄露。

因此,基类的析构函数设为虚函数,是为了在上面的情况下(这样的情况比比皆是)能够正确地调用派生类的析构函数。
恨天低 2011-03-14
  • 打赏
  • 举报
回复
第四个问题,你可以看看《effective C++》条款14: 确定基类有虚析构函数
附《effective C++》下载地址:
http://download.csdn.net/source/2990015
LinuxBirdMan 2011-03-14
  • 打赏
  • 举报
回复
1)如果没虚函数则1字节,有则4字节。。。class B;b[10];这样能区分每个元素
2)1字节
3) 4字节
4)便于继承的时候,基类对象的析构

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧