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       
    }
    int getI()
    {
        return mi;
    }
    int getJ()
    {
        return mj;
    }
};

int main()
{  
    Test t1(1, 2);

    cout<<"t1.getI()="<<t1.getI()<<endl;
    cout<<"t1.getJ()="<<t1.getJ()<<endl;

    return 0;
}

図の演算結果に示されるように
C ++  - 二次構造モード
、コンストラクタに返される戻り値を追加しない場合、結果が関数の期待に沿って、初期化ロジックの成功さ見
コンストラクタリターン加算
演算の結果の間に図の変化が示され
C ++  - 二次構造モードC ++  - 二次構造モード
、これらによってリターンを追加した後、我々が知ることができる時代の経営成績、印刷t1.getJは()、初期化が失敗し、ランダムな値であるreturn文のコンストラクタが終了した後、それを推測することができ
、以前に提案することができます質問は答えている
。1.コンストラクタのみ自動的にメンバ変数を初期化するための機会を提供
2.コンストラクタは、特定の初期化ロジックの成功を保証することはできません
return文の直後に終了3.コンストラクタコンストラクタを

半オブジェクト
半オブジェクトの概念を:半オブジェクトをオブジェクト++得、有効なCだけでなく、バグの重要な供給源期待どおりオブジェクトの初期化動作が完了することができない
構成の二次
とに分けることができる建設プロセスエンジニアリングを
初期化動作無関係1リソース-起こることができない、動作異常
メモリ割り当て、ファイルアクセス:など発生する可能性がある異常な状況で、 -操作は、システムリソースを使用する必要があります。2.
C ++  - 二次構造モード

#include <iostream>
using namespace std;

class TwoPhaseCons 
{
private:
    TwoPhaseCons() // 第一阶段构造函数
    {   
    }
    bool construct() // 第二阶段构造函数
    { 
        return true; 
    }
public:
    static TwoPhaseCons* NewInstance(); // 对象创建函数
};

TwoPhaseCons* TwoPhaseCons::NewInstance() 
{
    TwoPhaseCons* ret = new TwoPhaseCons();

    // 若第二阶段构造失败,返回 NULL    
    if( !(ret && ret->construct()) ) 
    {
        delete ret;
        ret = NULL;
    }

    return ret;
}

int main()
{
    TwoPhaseCons* obj = TwoPhaseCons::NewInstance();

    cout<<"obj="<<obj<<endl;//打印出obj的地址

    delete obj;

    return 0;
}

図演算結果に示されているように
C ++  - 二次構造モード
要約:
決定は初期状態のみコンストラクタオブジェクト1.
2.コンストラクタは、オブジェクトが出産の動作には影響しません初期化に失敗しました
不完全な半3.オブジェクトを初期化するバグの重要な源である
第二の注文4 2つの部分に人工的な構成の初期化プロセス
二次は完全に作成したオブジェクトが初期化されるように構成することができます

ます。https://blog.51cto.com/13475106/2410484で再現

おすすめ

転載: blog.csdn.net/weixin_33800463/article/details/93020822