C++之二阶构造模式

前言:C++中经常会因为调用系统资源失败导致出现BUG,所以在类调用构造函数需要分配系统资源时会出现BUG,从而导致类对象虽然被创建,但是只是个半成品,为了避免这种情况需要使用二阶构造模式

                      二阶构造模式

源码如下

 1 // 二阶构造.cpp : 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include<iostream>
 6
 7 using namespace std;
 8
 9 class test
10 {
11 private:
12     int d;
13     test();//一阶构造,构造不会产生BUG的赋值等操作
14     bool construct();//二阶构造,构造申请系统资源,内存申请
15 public:
16     //静态函数,巧妙在于静态函数可以访问私有成员
17     //且无需对象即可调用
18     static test* NewInstance();//总构造函数
19 };
20
21 int main()
22 {
23     test *p = test::NewInstance();
24
25     cout << p << endl;
26
27     return 0;
28 }
29
30 //一阶构造,构造不会产生BUG的赋值等操作
31 test::test()
32 {
33
34 }
35
36 //二阶构造,构造申请系统资源,内存申请
37 bool test::construct()
38 {
39     return 1;
40 }
41
42 //总构造函数
43 test* test::NewInstance()
44 {
45     test *ret = new test;//一阶构造
46
47     //一阶分配失败或二阶分配失败
48     //删除半成品对象并置空
49     if (!(ret&&ret->construct()))
50     {
51         delete ret;
52         ret = NULL;
53     }
54
55     return ret;
56 }
时间: 2024-10-07 00:32:37

C++之二阶构造模式的相关文章

二阶构造模式

模式:方法.设计模式,就是设计方法.前人证明了的行之有效的方法. 构造函数: 1.关于构造函数 -类的构造函数用于对象的初始化. -构造函数与类同名并且没有返回值. -构造函数在对象定义时自动被调用. 问题: 1.如何判断构造函数的执行结果? 2.在构造函数中执行return语句会发生什么? 3.构造函数执行结束是否意味对象构造成功? 编程实验:异常的构造函数.cpp 1 #include <stdio.h> 2 3 class Test 4 { 5 int mi; 6 int mj; 7 b

第27课 二阶构造模式

1. 构造函数的回顾 (1)关于构造函数 ①类的构造函数用于对象的初始化 ②构造函数与类同名并且没有返回值(思考:无返回值如何判断构造函数的执行结果?) ③构造函数在对象定义时自动被调用 [编程实验]异常的构造函数 #include <stdio.h> class Test { private: int mi; int mj; bool mStatus; public: Test(int i, int j):mStatus(false) { mi = i; return;//return,会导

C++--二阶构造模式

A.关于构造函数1.类的构造函数用于对象的初始化2.构造函数与类同名并且没有返回值3.构造函数在对象定义时被自动被调用Q.问题的出现1.如何判断构造函数的执行结果?2.在构造函数中执行return语句会发生什么?3.构造函数执行结束是否意味着对象构造成功?代码示例 #include <iostream> using namespace std; class Test { int mi; int mj; public: Test(int i, int j) { mi = i; mj = j }

第27课二阶构造模式(上)---------出现的背景

构造函数的回顾关于构造函数——类的构造函数用于对象的初始化——构造函数与类同名并且没有返回值——构造函数在对象定义时自动被调用 问题:1. 如何判断构造函数的执行结果?   目前来说,没有办法来判断构造函数的执行结果2. 在构造函数中执行return语句会发生什么?    在构造函数中可以存在return语句,return之后下面的代码就无法执行,会影响对象的初始状态3. 构造函数执行结束是否意味着对象构造成功?   对象的诞生与构造函数的执行结果是没有任何关系的.如果构造函数没有执行成功,只会

EBS OAF 开发中的OAQueryBean的三种构造模式

EBS OAF 开发中的OAQueryBean的构造模式 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 当你为pageLayout区域添加一个query 区域时,OAF框架生成一个oracle.apps.fnd.framework.webui.beans.layout.OAQueryBean对象,它依赖于它的配置,并通过一个子控件table, advanced table或者HGrid来实现simple search, advanced

C++二阶构造函数

转自:http://blog.51cto.com/9291927/1896411 一.构造函数的问题 构造函数存在问题: A.构造函数只提供自动初始化成员变量的机会 B.不能保证初始化逻辑一定成功,如申请系统资源可能失败 C.执行return语句后构造函数立即结束 构造函数创建的对象可能是半成品对象,半成品对象是合法的对象,但是是程序bug的来源之一.因此实际工程开发过程中使用二阶构造模式. 二.二阶构造模式 由于构造函数存在的潜在问题,实际工程开发中类对象的构造过程如下: A.资源无关的初始化

C++语言(03)——对象的构造

对象的构造(上) 成员变量的初始值 (1)从程序设计的角度来看,对象只是变量,定义对象就是定义变量,所以:在栈上创建对象时,成员变量初始值为随机值在堆上创建对象时,成员变量初始值为随机值在静态数据区上创建对象时,成员变量初始值为0(2)全局变量和static修饰的局部变量存储在静态数据区,没有显式初始化其值为0(bss/ZI段) /** 从程序设计的角度来看,对象只是变量,定义对象就是定义变量,所以: 在栈上创建对象时,成员变量初始值为随机值 在堆上创建对象时,成员变量初始值为随机值 在静态数据

第38课 Qt中的事件处理(上)

1. GUI程序原理回顾 (1)图形界面应用程序的消息处理模型 (2)思考:操作系统发送的消息如何转变为Qt信号 2. Qt中的事件处理 (1)Qt平台将系统产生的消息转换为Qt事件 ①Qt事件是一个QEvent的对象 ②Qt事件用于描述程序内部或外部发生的动作 ③任意的QObject对象都具备事件处理的能力 (2)GUI应用程序的事件处理方式 ①Qt事件产生后立即被分发到QWidget对象 ②QWidget中的event(QEvent*)进行事件处理 ③event()根据事件类型的不同,调用不

第九课、计算器界面代码重构

一.重构的概念 1.重构是以改善代码质量为目的代码重写 (1).使其软件的设计和架构更加合理 (2).提高软件的扩展性和维护性 2.代码实现和代码重构的不同 (1).代码实现:按照设计编程实现,重在实现功能 (2).代码重构:以提高代码质量为目的软件架构优化 (3).区别 A.代码实现时不考虑架构的好坏,只考虑功能的实现 B.代码重构时不影响已实现的功能,只考虑架构的改善 3.软件开发的过程 (1).从工程的角度对软件开发中的活动进行定义和管理 4.什么样的代码需要重构 (1).当发现项目中重复