コンストラクターで不変フィールドを初期化する方法: 詳細な探索
C では、次のようなシナリオに遭遇する可能性があります。コンストラクター内に不変フィールドを必要とするクラスを作成しようとしています。このような場合、フィールドの不変性を確保することが重要です。この記事では、この目的を達成するための適切なアプローチについて詳しく説明します。
クラス Foo がデータ構造として機能し、クラス Bar が構築中に引数として Foo ポインターを必要とする Foo のラッパーであるシナリオを考えてみましょう。私たちの目標は、このポインタが Bar インスタンスの存続期間中変更不可能であることを保証することです。
Bar のコンストラクタ内で const ポインタ foo を初期化しようとする試みは、次のようになります。
<code class="cpp">class Foo; class Bar { public: Foo * const foo; Bar(Foo* foo) { this->foo = foo; // Compiler error } }; class Foo { public: int a; };</code>
ただし、この方法ではコンパイル エラーが発生します。これを修正して Bar インスタンス内で foo の不変性を確立するには、初期化子リストを使用する必要があります。
<code class="cpp">Bar(Foo* _foo) : foo(_foo) {}</code>
この改訂版では、コンストラクターは Foo ポインターを引数として受け取り、それをメンバーに割り当てます。
この手法により、Bar の構築直後に foo ポインタが初期化され、Bar の残りの部分に対して不変になります。インスタンスの存続期間。
以上がC コンストラクターで Const メンバー変数を初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。