9.3 对象的生存期、作用域和可见域
前面介绍过类名和函数名一样,只有作用域和可见域,没有生存期。对象有生存期,对象的生存期也是对象中所有非静态数据成员的生存期,对象的所有非静态数据成员(包括const数据成员)都随着对象的创建而创建和初始化,随着对象的撤销而撤销。
对象的生存期、作用域和可见域取决于对象的创建位置,同样有全局、局部和类内之分,同前面关于普通变量的介绍并无区别,这里便不再赘述。
关于对象创建有几点问题需要强调。
9.3.1 先定义,后实例化
类的定义一定要在类对象声明之前,因为编译器要知道需要为类分配多大的内存空间,仅仅对类进行声明是不够的,如下所示。
class B;//声明 B objectB;/创建B类的对象 class B { …… };//B类定义但是,如果不创建B类的对象,而仅仅是声明一个指向类型B对象的指针(或引用),如下所示。 class B;//声明 B*pB=NULL;//创建B类的对象 class B { …… };//B类定义
上述代码是可行的,不论什么类型的指针,其内存大小都是相同的,编译器知道分配多大空间。但如果要创建类的对象,必须先定义类,再创建对象。