zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    【Todo】CSDN的《问底》系列-学习
    【Todo】深入PHP内核系列
    【转载】网络攻击技术(三)——Denial Of Service & 哈希相关 & PHP语言 & Java语言
    回溯法
    hdu 2842 Chinese Rings
    JSP 9 大内置对象详解
    用Html5结合Qt制作一款本地化EXE游戏-太空大战(Space War)
    HDU2795 billboard【转化为线段树。】
    URAL 1303
    IOS文件沙盒
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/7362348.html
Copyright © 2011-2022 走看看