1 类、对象和内存
1.1 通过内存看对象
我们先回顾一下类和对象的定义,类是定义同一类所有实例变量和方法的蓝图或原型;对象是类的实例化。从内存的角度可以对这两个定义这样理解,类刻画了实例的内存布局,确定实例中每个数据成员在一块连续内存中的位置、大小以及对内存的解读方式;对象就是系统根据类刻画的内存布局去分配的内存。除了实例变量和方法,类也可以定义类变量和类方法,这是我们通常所说的静态变量和静态函数,它们不属于某个具体的对象,而是属于整个类,所以不会影响对象的内存布局和内存大小。通过以上的讨论我们可以知道:对象本质上就是一块连续的内存,对象的类型(类)就是对这块内存的解读方式。在c++中我们可以通过四个类型转换运算符改变对象的类型,这种转换改变的是内存的解读方式,不会修改内存中的值。修改对象内存值的合法途径是通过成员函数/友元函数修改对象的数据成员。通过成员函数修改对象的值是c++语言保证对象安全的一种机制,但这种机制不是强制的,你可以通过暴力的非法手段避开这个机制(比如你可以取得对象的起始地址,然后根据对象的内存布局任意修改内存的值),除了极其特殊情况,这种人为非法手段都应当被禁止,因为这种暴力代码难于理解、不便移植、极易出错;另外程序在运行过程中由于代码中的某些缺陷也会非法修改对象内存的值,这是我们程序中许多疑难bug的根源。所以正确的编写类,理解对象在内存的运行特点,合理的控制对象的创建和销毁是一个程序稳定运行的基本保证。我们先回顾一下类和对象的定义