クラスの配列を作る方法

C++でクラスの配列を作る方法は以下の3つの方法をとるのが普通です。

  • コンテナ(vector)を使う
  • replacement-new(再配置new)を使う
  • クラスをC形式の配列で定義する(※非推奨)


1つ目の方法は、標準C++で最も推奨されるべき方法です。
2つ目の方法は、確保済み領域にクラスの実体を作る事が出来るので、極限までの高速化など、必要性に応じて使うことが有ります。
3つ目の方法は、最早時代遅れといえるでしょう。必要に応じて安全に拡張できるvectorを使うべきです。

まずはvectorの使い方です。

vector<T> foo(4); // ←4つをデフォルトコンストラクタで初期化
vector<T> bar(4, T(1, 2, 3)) // 4つを任意のコンストラクタで初期化

次に再配置newですが、以前に説明したため省略します。クラス1つ1つを任意のタイミングで初期化できたり、メモリ確保を纏められる利点があります。反面、クラスの破棄が特殊な上、面倒です。

最後はC形式の配列。

T foobar[4] = { T(1, 2, 3), 7, bar }; // 複雑な初期化も可能

この方式の盲点は初期化しないとデフォルトコンストラクタが動作してしまうということです。この例の場合、最後の要素はデフォルトコンストラクタが動作します。

1番目の要素はT(1, 2, 3)が呼び出され、2番目の要素は暗黙の型変換により何かのコンストラクタが動作するかもしれません。3番目の要素はコピーコンストラクタにより初期化されます。

最も高速なのはC形式の配列ですが、それを気にしなくてはならないほど洗練されたプログラムは世の中に殆どないのが実際でしょう。

出来ることなら保守のしやすいvectorを使いましょう。

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz