私はint
以下のような動的配列を宣言しようとしています:
int n;
int *pInt = new int[n];
でこれを行うことはできますstd::auto_ptr
か?
私は次のようなことを試しました:
std::auto_ptr<int> pInt(new int[n]);
しかし、それはコンパイルされません。
構造を使って動的配列を宣言できるかどうか、そしてその方法を考えていauto_ptr
ます。ありがとう!
いいえ、できません。また、そうはなりません。C++ 98は、配列に関しては非常に制限されておりauto_ptr
、非常に厄介な獣であり、必要なことを実行しないことがよくあります。
あなたはできる:
std::vector<int>
/ std::deque<int>
、またはstd::array<int, 10>
、またはを使用します
C ++ 11とstd::unique_ptr<int[]> p(new int[15])
、またはを使用する
C ++ 11を使用しますstd::vector<std::unique_ptr<int>>
(ただし、これは複雑すぎると感じますint
)。
コンパイル時に配列のサイズがわかっている場合は、静的コンテナーの1つ(array
またはarray-unique-pointer)を使用します。実行時にサイズを変更する必要がある場合は、基本的にを使用しますvector
が、より大きなクラスの場合は、一意のポインターのベクトルを使用することもできます。
std::unique_ptr
なりたかっstd::auto_ptr
たのですが、言語の制限のためにできませんでした。
それはいけません。再割り当てが異なるため( vs ) std::auto_ptr
、動的配列を処理できません。delete
delete[]
しかし、コンパイルエラーは何でしょうか...