如何获取存储在unique_ptr中的数组大小?

NoS*_*tAl 5 arrays stdvector unique-ptr c++11

如果我做:

std::unique_ptr<int[]> uparr(new int[1984]);
Run Code Online (Sandbox Code Playgroud)

我传递uparr给某人而没有传递1984给他们,他们能看到它有多少元素?
对于数组的unique_ptr,又是vector的.size()吗?

Ker*_* SB 7

不,没有.动态数组是一种有点缺陷的语言功能.你基本上总是希望/需要单独传递数组长度(除非你有某种哨兵政策).所以你不妨使用std::vector(如果你不介意容量的额外词).

  • @NoSenseEtAl:正如刚才所讨论的,无论如何,大小都是你想要的。对于一次性固定大小的动态数组来说,只有容量是多余的。 (3认同)
  • 它实际上是2个额外的单词,一个用于大小,一个用于容量:) (2认同)
  • @FruitBreak:为什么不呢?向量存储保证是连续的。 (2认同)
  • @FruitBreak [`data`](https://en.cppreference.com/w/cpp/container/vector/data) 成员函数为您提供指向元素的指针 (2认同)

gal*_*p1n 5

不,信息丢失了。

如果您需要跟踪它,请使用向量,或者如果您确实不需要额外的服务,请在分配的数组周围编写一个小包装器。例如,您可以查看std::dynarray从 c++1y 标准启动的提案。