应该何时使用智能指针来保存数组?

0x4*_*2D2 8 c++ c++11

我看到很多答案建议使用智能指针在内存中保存动态分配的数组.我的观点一直是,如果大小已知,它应该包含在一个中std::array,同样如果大小未知(即通过使智能指针的指针类型为未知边界的数组并reset()稍后进行)一个人应该使用std::vector.事实上,这就是我经常做的事情.

例如,最近我看到了一个使用的答案std::unique_ptr<int[5]> p(new int[5]).这似乎类似于构造一个,std::array<int, 5>因为大小是已知的.此外,额外的好处是std::array静态分配其数组并包含类似数组的特性,如大小,迭代器等.

那么使用智能指针来保持数组而不是使用专门为此目的制作的其他标准容器的原因是什么?

Pup*_*ppy 2

首先,unique_ptr<T[]>不需要静态大小 - 它可以只是unique_ptr<int[]>.

此外,额外的好处是 std::array 静态分配其数组

这并不能严格保证是一种好处。考虑一下如果我有一个 10 兆字节的数组,那将会耗尽我的堆栈。

一般来说,当人们希望在创建时固定数组大小但能够改变成员时,人们会选择这种方法。请注意,对于std::vector,您只能同时创建元素或者都不创建vector const。你不能只制作向量而不制作元素const