构造函数的回顾
- 类的构造函数用于对象的初始化
- 构造函数与类同名并且没有返回值
- 构造函数在对象定义时自动被调用
问题:
- 如何判断构造函数的执行结果
- 在构造函数中执行return语句会发生什么
- 构造函数执行结束是否意味着对象构造成功
实例1:
#include <stdio.h>
class Test
{
int mi;
int mj;
bool mStatus;
public:
Test(int i, int j) : mStatus(false)
{
mi = i;
return;
mj = j;
mStatus = true;
}
int getI()
{
return mi;
}
int getJ()
{
return mj;
}
int status()
{
return mStatus;
}
};
int main()
{
Test t1(1, 2);
if( t1.status() )
{
printf("t1.mi = %d\n", t1.getI());
printf("t1.mj = %d\n", t1.getJ());
}
return 0;
}
即使构造函数中有return 它依然可以直接编译运行成功,这说明了构造函数执行结束不意味着对象构造成功!
并且无法直接判断构造函数的执行结果!
对于上面创建的对象,我们称为半成品对象!
半成品对象的概念:初始化操作不能按照预期完成二得到的对象,半成品对象是合法的C++对象,也是bug的重要来源
半成品对象主要是来源自系统资源的申请失败(虽然这种情况很少),那么应对的措施就是二阶构造函数,淡出处理系统资源的申请。