构造函数只决定对象的初始化状态,不可以决定对象是否创建。
如果在构造函数中使用return,则将构造出一个半成品对象。
半成品对象:
构造函数没有全部执行。
二阶构造:
分两步来构造一个对象。
第一步: 与系统资源无关的初始化操作。(不会出现异常操作的)
第二步: 与系统资源相关的初始化操作。(可能会出现异常操作的。如:申请内存,访问文件)
#include <stdio.h> class TwoPhaseCons { private: TwoPhaseCons() // 第一阶段构造函数 { } bool construct() // 第二阶段构造函数 { return true; } public: static TwoPhaseCons* NewInstance(); // 对象创建函数 }; TwoPhaseCons* TwoPhaseCons::NewInstance() { TwoPhaseCons* ret = new TwoPhaseCons(); // 此处调用第一阶段的构造函数 if( !(ret && ret->construct()) ) // 此处调用第二阶段的构造函数 { delete ret; ret = NULL; } return ret; } int main() { TwoPhaseCons* obj = TwoPhaseCons::NewInstance(); // 通过类定义的构造函数来构造 printf("obj = %p ", obj); delete obj; return 0; }