4

私はint以下のような動的配列を宣言しようとしています:

int n;
int *pInt = new int[n];

でこれを行うことはできますstd::auto_ptrか?

私は次のようなことを試しました:

std::auto_ptr<int> pInt(new int[n]);

しかし、それはコンパイルされません。

構造を使って動的配列を宣言できるかどうか、そしてその方法を考えていauto_ptrます。ありがとう!

4

2 に答える 2

8

いいえ、できません。また、そうはなりません。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たのですが、言語の制限のためにできませんでした。

于 2011-11-30T02:03:08.360 に答える
0

それはいけません。再割り当てが異なるため( vs ) std::auto_ptr、動的配列を処理できません。deletedelete[]

しかし、コンパイルエラーは何でしょうか...

于 2011-11-30T02:03:39.067 に答える