【发布时间】:2019-02-20 10:16:55
【问题描述】:
我到处读到,在 C++ 中,仅从指向该内存块的指针获取动态数组的大小是不可能的。
怎么可能没有办法仅从指针获取动态数组的大小,同时又可以释放仅在指针上使用delete [] 分配的所有内存,而无需需要指定数组大小吗?
delete [] 一定知道数组的大小吧?因此,此信息必须存在于某处。不应该吗?
我的推理有什么问题?
【问题讨论】:
-
底层内存分配器知道它分配的块的大小,但没有返回该信息的标准函数。有时有非标准的 malloc 实现特定方式,但它们本质上是不可移植的。
-
为什么这很有趣?使用
std::vector,不用担心delete[]。 -
@n.m.我没有得到告诉你“不要打扰”的答案。如果有人问一个问题,背后是有原因的。原因不一定是“实际原因”。可能是好奇,可能是我想用机器代码实现编译器,或者其他什么。即使我们假设一个人应该总是有实际理由来提出问题,我相信总是有可能提出至少一两个可以使用新知识的案例。在某些情况下,我不能或不想使用 STL。
-
"如果有人问一个问题,背后是有原因的。"这些理由不一定成立。如果你想学习如何有效地使用 C++,那么不要为 delete 和指针而烦恼是正确的。它们的级别太低了,这些低级别的零重要性的东西有数不胜数。试图全部学习它们是浪费时间。如果您处于无法使用
std::vector的情况(应该非常很少见),您可能需要查看一个典型的实现以了解它是如何工作的,以便复制其中的一些。 -
@n.m.我不认为 SO 仅限于“学习如何有效使用 C++”的人。否则语言律师标签将毫无用处。 有人必须处理所有这些“低级的事情”,那么为什么要问他们这么不合理呢?