我正在尝试声明一个动态int
数组,如下所示:
int n;
int *pInt = new int[n];
我可以使用std::auto_ptr
执行此操作吗?
我尝试过类似的事情:
std::auto_ptr<int> pInt(new int[n]);
但它没有编译。
我想知道我是否可以使用auto_ptr
构造声明动态数组以及如何。谢谢!
答案 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_ptr
是std::auto_ptr
想要成为的但由于语言的限制而无法实现。
答案 1 :(得分:0)
你做不到。 std::auto_ptr
无法处理动态数组,因为重新分配不同(delete
vs delete[]
)。
但是我想知道编译错误可能是什么......