私は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、動的配列を処理できません。deletedelete[]
しかし、コンパイルエラーは何でしょうか...