类大小及类成员分配
来源:互联网 发布:淘宝客服回复质量问题 编辑:程序博客网 时间:2024/06/05 03:35
1、为何空类的大小不是0呢?
为了确保两个不同对象的地址不同,必须如此。
类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址。同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了。所以,空类的sizeof为1,而不是0.
2、请看下面的类:
class A{ virtual void f(){} };
class B:public A{}
此时,类A和类B都不是空类,其sizeof都是4,因为它们都具有虚函数表的地址。
3、请看:
class A{};
class B:public virtual A{};
此时,A是空类,其大小为1;B不是空类,其大小为4.因为含有指向虚基类的指针。
4、多重继承的空类的大小也是1.
class Father1{}; class Father2{};
class Child:Father1, Father2{};
它们的sizeof都是1.
5、何时共享虚函数地址表:
如果派生类继承的第一个是基类,且该基类定义了虚函数地址表,则派生类就共享该表首址占用的存储单元。对于除前述情形以外的其他任何情形,派生类在处理完所有基类或虚基类后,根据派生类是否建立了虚函数地址表,确定是否为该表首址分配存储单元。
补充:
对象的大小是它的数据成员所占存储空间之和,就和结构体一样。类中的函数是所有该类对象通用的方法,不算作对象的成员,因此也不算在对象的存储空间内
问题:类里面不管有多少个函数,这个类的对象只占1个字节的内存。这个字节的内存的内容是什么?是指针吗?指针不是占4个字节吗?
当类中类有定义任何变量的时候,类的对象都是1个字节的,当类中没有任何变量的时候,这个类里没有任何真正的成员变量,所以大小应该是0,但0大小不好在内存中定位一个地址,所以,就规定它大小为0的对象要占一字节空间,以便让它拥有一个合法的地址。如果是有派生类的,还有考虑到内存对齐的问题的。
那么成员函数又如何?上面得代码就好像类没有任何成员函数一样,根本说明不了问题。 呵呵,所有的函数都是存放在代码区的,不管是全局函数,还是成员函数。要是成员函数占用类的对象空间,那么将是多么可怕的事情:定义一次类对象就有成员函数占用一段空间。 我们再来补充一下静态成员函数的存放问题吧:静态成员函数与一般成员函数的唯一区别就是没有this指针,因此不能访问非静态数据成员,就像我前面提到的,所有函数都存放在代码区,静态函数也不例外。所有有人一看到 static 这个单词就主观的认为是存放在全局数据区,那是不对的
那么成员函数又如何?上面得代码就好像类没有任何成员函数一样,根本说明不了问题。 呵呵,所有的函数都是存放在代码区的,不管是全局函数,还是成员函数。要是成员函数占用类的对象空间,那么将是多么可怕的事情:定义一次类对象就有成员函数占用一段空间。 我们再来补充一下静态成员函数的存放问题吧:静态成员函数与一般成员函数的唯一区别就是没有this指针,因此不能访问非静态数据成员,就像我前面提到的,所有函数都存放在代码区,静态函数也不例外。所有有人一看到 static 这个单词就主观的认为是存放在全局数据区,那是不对的
- 类大小及类成员分配
- struct中成员分配大小
- C++回顾之static成员、static成员函数及类对象大小计算
- C++回顾之static成员、static成员函数及类对象大小计算
- 类成员函数大小问题
- c++类成员函数内存分配问题
- 求类的数据成员的大小
- 主类型默认值几大小,类成员
- 结构体中成员大小的空间分配
- 数组大小分配问题及相关问题
- C++ 静态成员变量 嵌套类分配回收内存
- c++ 类中的成员函数在内存空间的分配问题
- C++类中成员变量的内存分配
- 类的各种成员函数在类中是如何分配的?
- 类的各种成员函数在内存中是如何分配的?
- 类的各种成员函数在内存中是如何分配的?
- 类的各种成员函数在类中是如何分配的?
- 类中指针成员的内存分配和初始化
- linux驱动常用头文件简要说明
- java.io.EOFException
- 黑马程序员--异常处理(下)
- Android layout_weight用法图解
- c++builder 如何实现一个应用程序只能打开一个进程
- 类大小及类成员分配
- 设置windows自动登录
- window server2008 配置FTP服务
- 多个UpdatePanel控件相互引发刷新的使用(转)
- 黑马程序员--Java集合
- ssd1963初始化程序
- UESTC 1846Angry Grammar Nazi 字符串
- jquery 对下拉框的操作
- 黑马程序员--java中的常用类