如何检索智能指针数组的大小? (例如 std::unique_ptr<int[]>)
How can I retrieve the size of a smart pointer array? (e..g std::unique_ptr<int[]>)
堆分配的 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 数组的大小?
对于 new[]
/delete[]
和 malloc
/free
,大小确实存储在某处,但没有标准化的方式来访问该信息。
堆分配的 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 数组的大小?
对于 new[]
/delete[]
和 malloc
/free
,大小确实存储在某处,但没有标准化的方式来访问该信息。