此文编写参考狄泰软件学院唐佐林老师的视频课程,如有错误之处,欢迎指正。
1、构造函数的缺点
(1)只提供自动初始化成员变量的机会
(2)不能保证初始化逻辑成功
(3)执行return语句后构造函数立即结束
由此可知,构造函数可能会构造出一个半成品对象,那么什么是半成品对象呢?
①初始化操作不能够按照预期完成而得到的对象
②半成品对象是合法的c++对象,也是bug的重要来源
2、所以为了解决半成品对象所带来的危害,就引入了二阶构造模式。
所谓二阶构造也就是分两个阶段对对象进行构造。具体步骤如下所示:
第一阶段的构造是资源无关初始化操作,也就是一些不可能会出现异常情况的操作,如简单的赋值初始化等。
第二阶段的构造是系统资源申请的操作,这种操作是有可能出现异常情况的,如内存申请,访问文件等。
模式如下:
#include<stdio.h>
class Demo
{
private:Demo()//第一阶段构造{}bool TwoPhase() //第二阶段构造 { //........return true;//说明构造成功}
public:static Demo* NewInstance();
};
Demo* Demo::NewInstance()
{Demo* ret=new Demo();//第一阶段的构造if(!(ret->TwoPhase()&&ret)){delete ret;//构造失败,销毁对象ret=NULL;//将返回值赋值为空,标志创建失败}return ret;
}
int main()
{Demo* t1=Demo::NewInstance();printf("t1=%pn",t1);delete t1;return 0;
}
从运行结果可以知道,程序成功地从堆空间中申请了一个类对象,且每运行一次返回的地址都不一样,也就是说这个对象确实是从堆中申请的。当我们将如下函数进行修改,则此时最后就会返回一个NULL值。。
bool TwoPhase() //第二阶段构造
{//........return false;//说明构造失败
本文发布于:2024-01-31 22:04:58,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170670989631671.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |