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

                      二阶构造模式

源码如下

 // 二阶构造.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include<iostream> using namespace std; class test
{
private:
int d;
test();//一阶构造,构造不会产生BUG的赋值等操作
bool construct();//二阶构造,构造申请系统资源,内存申请
public:
//静态函数,巧妙在于静态函数可以访问私有成员
//且无需对象即可调用
static test* NewInstance();//总构造函数
}; int main()
{
test *p = test::NewInstance(); cout << p << endl; return ;
} //一阶构造,构造不会产生BUG的赋值等操作
test::test()
{ } //二阶构造,构造申请系统资源,内存申请
bool test::construct()
{
return ;
} //总构造函数
test* test::NewInstance()
{
test *ret = new test;//一阶构造 //一阶分配失败或二阶分配失败
//删除半成品对象并置空
if (!(ret&&ret->construct()))
{
delete ret;
ret = NULL;
} return ret;
}

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

  1. C++解析(15):二阶构造模式

    0.目录 1.构造函数与半成品对象 2.二阶构造 3.小结 1.构造函数与半成品对象 关于构造函数: 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在对象定义时自动被调用 问题 ...

  2. C++ 二阶构造模式

    1.如何判断构造函数的执行结果? 构造函数没有返回值,所以不能通过返回值来判断是构造函数是否构造成功. 如果给构造函数强行加入一个返回值,用来表示是否构造成功.这样确实能够反映出构造的结果,但是不够优 ...

  3. 14.C++-二阶构造模式、友元(详解)

    首先回顾以前所学的构造函数 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在定义时被自动调用 由于构造函数没有返回值不能判断执行结果,所以不能保证初始化对象能否成功 比如: c ...

  4. javascript创建对象之函数构造模式和原型模式结合使用(四)

    创建自定义类型的常见方式就是组合使用构造函数模式与原型模式一起使用. 构造函数模式用于定义实例对象的特有的部分(属性和方法),原型模式用于定义共享的部分. 这样最大限度的节省了内存的开销. funct ...

  5. cocos2d-x中的二段构造模式

    学习cocos2d-x的过程中,会发现很多对象都通过一个静态函数create来创建.比方以下的一个样例 #define CREATE_FUNC (__TYPE__) \ static __TYPE__ ...

  6. 谈ObjC对象的两段构造模式

    前言 Objective-c语言在申请对象的时,需要使用两段构造(Two Stage Creation)的模式.一个对象的创建,需要先调用alloc方法或allocWithZone方法,再调用init ...

  7. C++解析(30):关于指针判别、构造异常和模板二义性的疑问

    0.目录 1.指针的判别 2.构造中的异常 2.1 如果构造函数中抛出异常会发生什么? 2.2 如果析构函数中抛出异常会发生什么? 3.令人迷惑的写法 3.1 模板中的二义性 3.2 函数异常声明 4 ...

  8. C++二阶构造函数

    转自:http://blog.51cto.com/9291927/1896411 一.构造函数的问题 构造函数存在问题: A.构造函数只提供自动初始化成员变量的机会 B.不能保证初始化逻辑一定成功,如 ...

  9. 第50课 关于对话框(About)

    1. 关于对话框 (1)标准的桌面应用软件都有一个关于对话框 (2)关于对话框用于标识软件自身的信息.如logo.项目名.版本号.开发者信息.版权信息.联系方式等. 2. 经典设计方案 3. 项目持续 ...

随机推荐

  1. HDU 1875:畅通工程再续(最小生成树)

    畅通工程再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  2. django ----CBV中加装饰器

    CBV中加装饰器 from django import views from django.utils.decorators import method_decorator def login_aut ...

  3. Java 源码解析

    Object equals方法对比两个对象是否是内存中同一个物理地址 hashCode规定,当两个对象相等时,必须返回相等的hashCode,所以重写equals方法有必要重写hashCode方法 如 ...

  4. mac sz rz file tras

    安装Zmodem的实现 brew install lrzsz 下载 iterm2-send-zmodem.sh 和 iterm2-recv-zmodem.sh 到路径/usr/local/bin/   ...

  5. H5公共样式,用于所有H5开发页面

    @charset "UTF-8"; /* H5公共样式,用于所有H5开发页面*/ html { font-family: "Microsoft Yahei", ...

  6. 【转】ImageView.ScaleType属性

    原文网址:https://blog.csdn.net/Buaaroid/article/details/49360779 ImageView的Scaletype决定了图片在View上显示时的样子,如进 ...

  7. redis之 3.0集群安装

    1. 集群 即使有了主从复制,每个数据库都要保存整个集群中的所有数据,容易形成木桶效应. 使用Jedis实现了分片集群,是由客户端控制哪些key数据保存到哪个数据库中,如果在水平扩容时就必须手动进行数 ...

  8. node api 之:Error

    Node.js 中运行的应用程序一般会遇到以下四类错误: 标准的 JavaScript 错误: <EvalError> : 当调用 eval() 失败时抛出. <SyntaxErro ...

  9. GoJS 在 vue 项目中的使用

    GoJS 在 html vue 项目中的使用,github地址:https://github.com/cag2050/gojs_demo GoJS 在 vue-cli 2.x 项目中的使用,githu ...

  10. Jmeter学习—004—使用代理录制脚本—HTTP代理服务器(APP、web皆可)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mmmmmmm_2niu/article/details/78136253记得我最开始使用jmeter ...