日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中的二阶构造模式

發(fā)布時間:2025/4/5 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中的二阶构造模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1 C++中的二階構(gòu)造模式

1.1 半成品對象

首先回顧下構(gòu)造函數(shù):

  • 類的構(gòu)造函數(shù)用于對象的初始化。
  • 構(gòu)造函數(shù)與類同名并且沒有返回值。
  • 構(gòu)造函數(shù)在對象定義時自動被調(diào)用。

思考如下幾個問題:

  • 如何判斷構(gòu)造函數(shù)的執(zhí)行結(jié)果?
  • 在構(gòu)造函數(shù)中執(zhí)行return語句會發(fā)生什么?
  • 構(gòu)造函數(shù)執(zhí)行結(jié)束是否意味著對象構(gòu)造成功?
  • 實(shí)際上的構(gòu)造函數(shù):

    • 只提供自動初始化成員變量的機(jī)會。
    • 不能保證初始化邏輯一定成功。
    • 執(zhí)行return語句后構(gòu)造函數(shù)立即結(jié)束。

    構(gòu)造函數(shù)只能決定對象的初始化狀態(tài),構(gòu)造函數(shù)中初始化操作的失敗不影響對象的誕生!

    半成品對象的概念:

    • 初始化操作不能按照預(yù)期完成而得到的對象。
    • 半成品對象是合法的C++對象,也是Bug的重要來源。

    1.2 二階構(gòu)造

    工程開發(fā)中的構(gòu)造過程可分為:

    • 資源無關(guān)的初始化操作,不可能出現(xiàn)異常情況的操作。
    • 需要使用系統(tǒng)資源的操作,可能出現(xiàn)異常情況,如:內(nèi)存申請、訪問文件。

    二階構(gòu)造人為的將初始化過程分為兩部分,二階構(gòu)造能夠確保創(chuàng)建的對象都是完整初始化的。




    示例代碼:

    #include <stdio.h>class TwoPhaseCons { private:TwoPhaseCons() // 第一階段構(gòu)造函數(shù){ }bool construct() // 第二階段構(gòu)造函數(shù){ return true; } public:static TwoPhaseCons* NewInstance(); // 對象創(chuàng)建函數(shù) };TwoPhaseCons* TwoPhaseCons::NewInstance() {TwoPhaseCons* ret = new TwoPhaseCons();// 若第二階段構(gòu)造失敗,返回 NULL if( !(ret && ret->construct()) ) {delete ret;ret = NULL;}return ret; }int main() {TwoPhaseCons* obj = TwoPhaseCons::NewInstance();printf("obj = %p\n", obj);delete obj;return 0; }

    參考資料:

  • C++深度解析教程
  • 總結(jié)

    以上是生活随笔為你收集整理的C++中的二阶构造模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。