我在想,
delete[]
如何知道动态分配数组的大小,我发现了这个问题(还有微软论坛上的这个问题,但答案类似)。结果是:答案是:
这通常存储在你获得分配内存之前的“头”段中。
因此,确切的细节取决于具体实现。
在这个答案下面,有一个评论问为什么这个非常有用的信息不可供程序员使用,迫使我们传递表示大小的变量。该评论得到的答案是:
强制分配器存储请求的大小(这样您就不需要自己传递数组大小)可能是一个小负担,但它可能会影响可想象的分配器设计的性能。
对我来说,这并不令人信服,考虑到大小应该可以被delete[]
访问。
我的问题是:程序员是否有可能以某种方式检索大小?
我知道有一种微软特殊的方法(正如在上述MS论坛中指出的那样),但我想要的是标准化的东西。
您可以使用Microsoft特定的函数_msize()从指针中获取动态分配数组的大小,即使它被传递到其他函数而不是执行分配的函数。
std::vector
,不用担心它。 - NathanOlivernew[]
时才需要使用delete []
,如果您将所有的new[]
实例替换为适当使用std::vector
,则可以获得一个有用的句柄,同时包含"动态数组"的逻辑大小和分配大小。 - Calethstd::vector
(或其他STL工具)是不可接受的。在这种情况下,找出通过new[]
分配的内存块大小为什么不可访问对程序员很有用。 - Zereges