すべては、あなたが何をしたいかによって異なります。スタックは、もちろん割り当てがはるかに高速ですが、この問題はコンテキストに依存します。
この配列に何が起こるかをカプセル化したい場合、3番目のオプションは、オブジェクトにオブジェクトを囲み、コンストラクタで初期化を実行することです。この方法では、初期化で割り当てを隠すのではなく、割り当ての初期化を隠すことになります。このタイプの配列を作成するたびに、必ずそのように初期化されます。
ダイナミックメモリを搭載した例:もちろん
class MyArray {
std::unique_ptr<int[]> array;
public:
MyArray(int n) : array(new int[n]) {
/* initialization here */
}
int& operator [](int i) { return array[i]; }
}
、あなたは独自のクラスではなくポインタとしてそれを周りに渡す(ただし、とにかく周りべきないパスポインタ)しなければならない、とあなたが持っていますoperator []
のように、オブジェクトの外側から配列にアクセスするメソッドを実装します。
あなたはそれをカプセル化する場合であっても、スマートポインタを使用してください:vector
はまだいくつかのオーバーヘッドを持っていながら、unique_ptr
だけの光と通常のポインタとして速いようですが、動的メモリとすぐが外になるように解放されることを保証します可能な限りすべてのパスにdelete
を置く必要はありません。あなたは、彼らはあなたが配列の場合はもちろん
template<int len>
class MyArray {
int array[len];
public:
MyArray(int n) {
/* initialization here */
}
int& operator [](int i) { return array[i]; }
}
'のstd :: vector' ... – deviantfan
はちょうど'のstd :: vector'を使用します(必要に応じて 'const')参照することによってそれを周りに渡すと、あなたはメモリの割り当てを心配する必要はありません。 – ArchbishopOfBanterbury
さらに、 'std :: vector <>' :)を使ってください。 – lorro