【发布时间】: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::vector?smart_ptr<T[]>确实比其他任何事情都更糟糕。甚至boost::shared_array文档也指出shared_ptr<vector>是一个值得选择的选择。 -
@myaut
dynarray的发明是为了弥补与C99/C11的差距。但是没有人真正知道如何真正设计这样的东西,所以它又被放弃了。 -
@quant 请。你很聪明。你知道这不是真的。我们需要一个不伴随线程安全引用计数成本的智能指针。那么您是否会因为不想使用
vector而放弃调试断言?那真的很奇怪。我认为我们不应该在这里继续讨论,我想我已经表达了我的观点。