C++ Constructor Delegate - コンストラクタからコンストラクタを呼び出す2020年04月13日 11時03分28秒

C++11 から Constructor Delegate が利用可能になった。「コンストラクタ・デリゲイト」はコンストラクタからコンストラクタを呼び出す事。デリゲイトは委託するなどと言った意味がある。これ以前の C++ では各々のコンストラクタを直接実装する必要があり、その為の迂回策等はありはしたが、いろいろと問題があった。

コンストラクタ・デリゲイトにより、コンストラクタからコンストラクタを呼び出せる様になり、コードの重複とデータメンバ初期化の重複を防げる。呼び出し時には、初期化リストを通じてのみ呼び出せる。

実際に利用してみる。

#include <iostream>

class C
{   
    int count_;
public:
    C(): C( -1 )
    {
         count_ = 0;
         std::cout << "by default " << count_ << std::endl;
    }

    C( int i ): count_( i )
    {
         std::cout << "by int " << count_ << std::endl;
    }
};

int main()
{   
    C one( 1 );
    C c;
}
そして、こちらが実行例。
% c++ -std=c++11 delegate.cpp
% ./a.out 
by int 1
by int -1
by default 0
最初の C クラスインスタンスは 1 を出力した。次の C クラスインスタンスは、-1 をデリゲイトコンストラクタを通して出力し、自ら 0 を出力している。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2020/04/13/9234905/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。