如何使用std :: auto_ptr声明动态数组?

时间:2011-11-30 01:59:40

标签: c++ arrays auto-ptr

我正在尝试声明一个动态int数组,如下所示:

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

我可以使用std::auto_ptr执行此操作吗?

我尝试过类似的事情:

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

但它没有编译。

我想知道我是否可以使用auto_ptr构造声明动态数组以及如何。谢谢!

2 个答案:

答案 0 :(得分:7)

不,你不能,也不会:C ++ 98在数组方面非常有限,auto_ptr是一个非常笨拙的野兽,往往不能做你需要的东西。< / p>

你可以:

  • 使用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感觉太复杂了。)

如果在编译时已知数组的大小,请使用其中一个静态容器(array或数组唯一指针)。如果你必须在运行时修改大小,基本上使用vector,但对于较大的类,你也可以使用唯一指针的向量。

std::unique_ptrstd::auto_ptr想要成为的但由于语言的限制而无法实现。

答案 1 :(得分:0)

你做不到。 std::auto_ptr无法处理动态数组,因为重新分配不同(delete vs delete[])。

但是我想知道编译错误可能是什么......