如何检索智能指针数组的大小?(例如 std::unique_ptr<int[]>)

qua*_*ant 4 c++ arrays pointers

堆分配的 c 数组不保留任何大小信息,正如这里指出的:

如何在 C 中找到动态分配数组的大小?

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

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

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

arr假设这val是一个运行时变量,如何检索在上面的示例中分配的 c 数组的大小?

Joh*_*ica 6

使用new[]/delete[]malloc/ free,大小确实存储在某处,但没有标准化的方式来访问该信息。