C++クラスのレプリケーションコンストラクタと付与コンストラクタ


class Demo
{
public:
    Demo()
    {
    
    }
    Demo(int j)
    {
        cout<<"Demo int: "<<j<<endl;
        this->i = j;
    }
    Demo(const Demo& d)
    {
        cout<<"      "<<endl;
    }
    Demo& operator = (const Demo& d)
    {
        
        cout<<"operator =       "<<endl;
        this->i = d.i;
        return *this;
    }
    
    Demo& operator = (const int x)
    {
        this->i = x;
        cout<<"operator = int: "<<x<<endl;
        return *this;
    }
    
    int i;
};
int main(int argc, char * argv[])
{
    @autoreleasepool {
         /*
                             ,            :Demo demo2 = Demo(demo1);      
          */
        Demo   demo1;
        Demo   demo2 = demo1;
        cout<<"*****"<<"demo2.i="<<demo2.i<<"*****"<<endl;

        
        /*  ,           Demo demo2 = demo1      ,            operator = (demo1),   demo2.operator = (demo1);*/
        Demo demo3;
        demo2 = demo3;

       /*  ,     Demo demo2 = Demo(3),               ,      ,           ,   Demo(int j)       explicit   ,          Demo(3)    。   :Demo demo2 = Demo(3);*/
        Demo   demo4 = 3;
        cout<<"*****"<<"demo4.i="<<demo4.i<<"*****"<<endl;
        
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
    :

      
*****demo2.i=1437553448*****
operator =       
Demo int: 3
*****demo4.i=3*****

コンストラクタのコピー
コピーコンストラクション関数もコンストラクション関数ですが、パラメータは1つしかありません.このパラメータの場合、このクラスのオブジェクトは、また、パラメータ値は、関数を呼び出すときに不注意でオブジェクト値が変更されないように、オブジェクトの参照形式(一般的にconst宣言を付けることで、パラメータ値を変更できません)を使用します.このレプリケーションコンストラクタの役割は、実パラメータオブジェクトの各データ・メンバーの値を新しいオブジェクトのメンバーの値に割り当てることです.
オブジェクトのコピーと割り当ての違い
オブジェクトの割り当ては、既存のオブジェクトに割り当てられるため、割り当てを行うには、割り当てられたオブジェクトを定義する必要があります.オブジェクトのレプリケーションは、オブジェクトの構造とメンバーの値を含む既存のオブジェクトと完全に同じように、新しいオブジェクトを無から有に作成します.