「委譲コンストラクタ (delegating constructors)」は、コンストラクタから同じクラスの他のコンストラクタを実行(処理を委譲)する機能です。
委譲コンストラクタ (delegating constructors) の例を以下に記載します。
(2)のコンストラクタでの X(42)
の部分が委譲コンストラクタです。(2)のコンストラクタから(1)のコンストラクタを呼び出し、初期化処理を(1)のコンストラクタに集約しています。
(1)のコンストラクタから返ったのちに、(2)のコンストラクタの本体(下図例では空ですが {}
の部分)が実行されます。この機能を使用することにより、複数のコンストラクタを作成・メンテナンスするコストが減り、コードの肥大化を抑えることができます。
| コンパイラ : | g++, | 13.3.0 |
| OS : | Ubuntu, | 24.04 |
["delegeting_constructors_01.cpp"]
// このコードは C++11 の機能である「コンストラクタの委譲」を使用しています。
// (2)のデフォルトコンストラクタは、(1)のコンストラクタに初期値42を渡して初期化処理を委譲しています。
// これにより、コードの重複を避け、保守性が向上します。
#include <iostream>
class X {
int i_;
public:
X(int i) : i_(i) {} // (1) : int型のパラメータを受け取るコンストラクタ
X() : X(42) {} // (2) : デフォルトコンストラクタ。
// (1)のコンストラクタに初期値を渡して初期化処理を委譲する
int getValue() const {
return i_;
}
};
int main() {
X x1; // デフォルトコンストラクタ(2) が呼ばれる
X x2(10); // int型のパラメータを受け取るコンストラクタ(1) が呼ばれる
std::cout << "x1 value: " << x1.getValue() << std::endl; // 出力: x1 value: 42
std::cout << "x2 value: " << x2.getValue() << std::endl; // 出力: x2 value: 10
return 0;
}
ビルド、実行
$ g++ -Wall deletegating_constructors_01.cpp -o deletegating_constructors_01.out $ ./deletegating_constructors_01.out x1 value: 42 x2 value: 10 $
本ページの情報は、特記無い限り下記 MIT ライセンスで提供されます。
| 2025-10-20 | - | 新規作成 |