可能重复:
Is there any way to determine the size of a C++ array programmatically? And if not, why?
我可以在C ++中获取动态分配数组的长度,如果没有,C ++的delete运算符如何知道要释放多少元素。
我搜索了论坛,发现对于动态分配的数组,长度存储在数组头部或其他地方之前的四个字节中。我怎样才能获得这个价值?
答案 0 :(得分:2)
标题前面的四个字节绝对是您不应使用的实现细节。如果您需要知道数组的大小,请使用std :: vector。
答案 1 :(得分:1)
std::vector
,std::string
等。
delete[]
运算符知道,因为C ++库的实现具有该信息,但它不可用于C ++程序。在某些实现中,就是这种情况,它存储在指针的实际地址之前的某些字节中,但同样,您无法知道它。
答案 2 :(得分:1)
你做不到。但是,std::vector<T> v(N)
与new T[N]
几乎完全相同,并提供v.size()
,因此您应该真正使用它,除非您有一个很好的理由要使用手动数组。
答案 3 :(得分:0)
另一个选择是定义你自己的分配器(重载operator new []和delete []用于你关心或做的任何类 #define malloc mymalloc 和 #define free myfree 取决于你的情况)。你存储阵列长度的地方取决于你,但通常会在数组开始之前分配额外的字节(无论数量是内存对齐的适当数量 - 通常是4,8或16)并存储长度。