对象模型
对象的内容:
虚函数 非虚函数 非静态成员变量 静态成员变量
对象的大小受以下三个因素影响:
- 非静态成员变量
- 虚函数
- 对齐
注意:
1.C++规定空类对象大小至少为1字节,只是为了区分实例化对象。例如创建了多个空类的对象,可以通过对象的内存地址区分。
2.静态成员变量位于.bss或.data段,函数位于.txt段
内存布局:
虚函数指针在前,非静态成员变量在后
1.数据:
非静态成员的声明顺序和内存分配顺序一致,不同访问控制级别分配顺序未规定
由于有填充,所以要注意声明顺序
2.对象
单继承:
基类在前,派生在后
对齐保证派生类赋值给基类的完整性
多继承:
总体原则:基在前,派生在后
##############################################################
c++primer内容
##############################################################
函数重载
特征标-函数参数
函数模板
template<class Any>;
void Swap(Any &a,Any &b);
模板的重载
void Swap(Any[],Any[],int n);
显示具体化
template<> void Swap<int>(int &,int &);
头文件管理
如果没有被定义过才查看 idndef 和endif之间的内容
#ifndef COORDIN_H_
...
#endif
存储持续性
程序执行时被创建,执行完时被释放
堆栈实现
没有使用说明符时与auto等效
寄存器实现
register int y; //寄存器没有地址 &y not allowed
-
函数定义外的变量和static定义的变量,在程序整个运行过程都存在。(使用固定内存块)
-
默认初始化为0,只能使用常量表达式来初始化;
-
与自动变量同名时将被覆盖,使用extern重新声明可使用以前的外部变量
-
::放在变量前表示使用全局版本
外部链接性
代码块外部声明;
- 在其他文件使用时要加上extern
内部链接性
代码块外部声明且加staic关键字
- 声明与其他文件同名外部变量时会冲突,使用static可隐藏其他文件的变量
无链接性
代码块内部声明且加static关键字
使用const与static效果类似
new操作符分配的内存,一直存在,直到delete将其释放或程序结束。
布局new:
#include<new>
p1 = new (buffer1) chaff; // place structure in buffer1
p2 = new (buffer2) int[20]; //place int array in buffer2
布局new分配的内存不能用delete来释放