好吧,我认为这并不重要,但由于程序必须存储长度,因为 delete[] 反正我们为什么不能得到这个“存储的信息”?
最佳答案
实现只需要存储长度,并且通常只在类型不可简单破坏(即,它需要生成对析构函数的调用)并且数组是使用 new[] 运算符创建的情况下才需要。
由于数组类型的属性与数组的大小无关,因此将长度“cookie”简单地称为私有(private)实现细节更为优雅。
要获取完整数组对象的长度(不仅仅是指针),您可以使用 std::extent< decltype( arr ) >::value
或 std::end( arr ) - std::begin( arr )
.
使用 new[]
带有析构函数的类是代码气味。考虑std::vector
反而。开销与原始 new[]
(考虑到需要分配的所有字节,无论它们在哪里)是一个指针的字节数,好处是数不胜数的。
关于c++ 为什么没有长度(数组)之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264032/