类对象的构造
再次阅读与总结C++程序设计语言,依然可以引起深入的思考与再思考~~~
=======================================================================================
考虑创建对象(特别是类对象)的各类不一样方式,以及它们在后来怎么销毁。一个对象能够经过以下方式创建:
- 一个命名的自动对象,当程序的执行每次遇到它的声明时创建,每次程序离开它所出现的块时销毁;
- 一个自由存储对象,经过new运算符创建,经过delete运算符销毁;
- 一个非静态成员对象,做为另外一个类对象的成员,在它做为成员的那个对象创建或者销毁时,它也随之被创建或销毁;
- 一个数组元素,在它做为元素的那个数组被创建或销毁时创建或销毁;
- 一个局部静态对象,在程序执行中第一次碰见它的声明时创建一次,在程序终止时销毁一次;
- 一个全局对象、名字空间的对象、类的静态对象,它们只在“程序开始时”创建一次,在程序终止时创建一次;
- 一个临时对象,做为表达式求值的一部分被创建,在它所出现的那个完整表达式的最后被销毁;
- 一个在分配操做中由所提供的参数控制,在经过用户提供的函数得到的存储里放置的对象;
- 一个union成员,它不能有构造函数和析构函数
面向对象 --- 类 忠告
- 用类表示概念
- 只将public数据(struct)用在它实际上仅仅是数据,并且对于这些数据成员并不存在不变式的地方;
- 一个具体类型属于最简单的类。若是适用的话,就应该尽量使用具体类型,而不要采用更复杂的类,也不要使用简单的数据结构;
- 只将那些须要直接访问类的表示的函数做为成员函数;
- 采用名字空间,使类与其协助函数之间的关系更明确;
- 将那些不修改对象值的成员函数作成const成员函数;
- 将那些须要访问类的表示,但无需针对特定对象调用的成员函数作成static成员函数;
- 经过构造函数创建起类的不变式;
- 若是构造函数申请某种资源,析构函数就应该释放这一资源;
- 若是在一个类里有指针成员,它就须要有复制操做(包括复制构造函数和复制赋值);
- 若是一个类里有引用成员,它就可能须要有复制操做(复制构造函数和复制赋值);
- 若是一个类须要复制操做或析构函数,它多半还有构造函数、析构函数、复制赋值和复制构造函数;
- 在复制赋值里须要检查自我赋值;
- 在写复制构造函数时,请当心的复制每一个须要复制的元素(小心默认的初始式);
- 在向某个类中添加新成员时,必定要仔细检查,看是否存在须要更新的用户定义构造函数,以使它可以初始化新成员;
- 在类声明里须要定义整型常量时,请使用枚举;
- 在构造全局的和名字空间的对象时,应避免顺序依赖性;
- 用第一次开关去缓和顺序依赖性问题;
- 请记住,临时对象将在创建它们的那个完整表达式结束时销毁。