【问题标题】:How can I retrieve the size of a smart pointer array? (e..g std::unique_ptr<int[]>)如何检索智能指针数组的大小? (例如 std::unique_ptr<int[]>)
【发布时间】:2015-04-28 03:43:15
【问题描述】:

堆分配的 c 数组不保留任何大小信息,如下所示:

How can i find the size of a dynamically allocated array in C?

但是,c++11 中的智能指针能够使用下标 ([]) 运算符重载来存储内存和使用数组版本管理 c 数组:

std::unique_ptr<int[]> arr(new int[val]);

当这个智能指针超出范围时,它可能会释放所拥有的内存块,因此它必须将内存块的大小存储在某个地方。

假设val 是运行时变量,我如何检索上例中arr 上分配的c 数组的大小?

【问题讨论】:

  • malloc_size 可能有用。但你真的只需要std::vector
  • 为什么需要动态分配静态定义大小的数组?我认为std::array 更适合您的情况(或std::vector 用于真正的动态数组)。
  • @quant 如果我是你的读者,我会想:他为什么要使用那个装置而不是std::vectorsmart_ptr&lt;T[]&gt; 确实比其他任何事情都更糟糕。甚至boost::shared_array 文档也指出shared_ptr&lt;vector&gt; 是一个值得选择的选择。
  • @myaut dynarray 的发明是为了弥补与C99/C11 的差距。但是没有人真正知道如何真正设计这样的东西,所以它又被放弃了。
  • @quant 请。你很聪明。你知道这不是真的。我们需要一个不伴随线程安全引用计数成本的智能指针。那么您是否会因为不想使用vector 而放弃调试断言?那真的很奇怪。我认为我们不应该在这里继续讨论,我想我已经表达了我的观点。

标签: c++ arrays pointers


【解决方案1】:

对于new[]/delete[]malloc/free,大小确实存储在某个地方,但没有标准化的方法来访问该信息。

【讨论】:

  • 好的,谢谢,我希望类似于sizeof(arr) 的东西可能会起作用...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多