C++中类的内存分配简单总结
来源:互联网 发布:恋母情结 知乎 编辑:程序博客网 时间:2024/06/03 22:45
类的内存分配简单总结
代码片段如下:
classClassA
{
private:
intA;
intB;
voidprin1()
{
}
voidprin2()
{
}
virtualvoidprin3()
{
}
};
classClassB:publicClassA
{
public:
intC;
intD;
voidprin4()
{
}
voidprin5()
{
}
virtualvoidprin6()
{
}
};
int_tmain(intargc,_TCHAR*argv[])
{
cout<<sizeof(ClassA)<<endl;
cout<<sizeof(ClassB)<<endl;
return 0;
}
结果是12
20;
结果为什么是这样?
32位系统int占4个字节,而一个类中所有的虚函数通过一个虚函数指针管理,类对象的大小只包含这个vptr指针,其他虚函数是放在别的内存空间中管理,vptr指针也是4个字节大小。注意到普通成员函数并不占类对象的大小空间,因为普通成员函数通过this指针管理,一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。这个this指针会因编译器不同而有不同的放置位置,可能是栈,也可能是寄存器,甚至全局变量。子类其实不管如何继承,用sizeof()算该类的大小都会把父类中的私有成员变量所占的空间算进去,也就是说,私有变量也在子类中分配了类存,但你却不可以直接访问,这起到一个保护作用,我感觉这如同一个珠宝,共有继承就是开放性的展览,而私有继承是把珠宝锁起来,你却不能动,要动珠宝如果有管家(基类的public中定义了一些对其私有变量操作的成员函数,)只能让管家帮你代劳。所以基类就得出了12子类就得出了20。
- C++中类的内存分配简单总结
- C中程序的内存分配
- C中进程的内存分配
- C中进程的内存分配
- C中内存分配的方式
- C语言中分配内存的函数
- C语言中关于内存的分配
- c语言中内存的分配
- 简单的内存分配
- C/C++程序中内存的分配和堆栈的区别总结
- C的内存分配
- 一个简单类的内存分配
- C指针一个简单的小错误(1)-内存分配
- C语言中内存分配
- C语言中内存分配
- C语言中内存分配
- c语言中内存分配
- C语言中内存分配
- shell里取oracle表的值和连接roacle进行数据处理两种方式
- JSON 基础语法讲解,以及操作
- javascript 动态改变层的大小
- mac,xcode快捷键
- oracle listener.ora,sqlnet.ora,tnsnames.ora配置说明
- C++中类的内存分配简单总结
- ucosii在stm32上的移植详解1
- Excel导出
- Android adb的常用命令
- 为什么打开Excel 表格会自动打印
- linux系统版本库问题
- ucosii在stm32上的移植详解2
- SQL collate(排序规则)设置。
- google 地图和baidu地图 在android上的实现过程详解和对比 包含 自定义图层的绘制