Aur*_*rus 14 c++ arrays language-design
好吧,我不认为它真的很重要,但由于程序必须存储长度因为删除[]无论如何,为什么我们不能得到这个"存储信息"?
实现只需要存储长度,并且通常只有,如果类型不是简单的可破坏的(即,它需要生成对析构函数的调用)并且数组是使用new []运算符创建的.
由于阵列类型的属性与数组的大小无关,因此将长度"cookie"称为私有实现细节更为优雅.
要获得完整数组对象(不仅仅是指针)的长度,您可以使用std::extent< decltype( arr ) >::value或std::end( arr ) - std::begin( arr ).
使用new[]带有析构函数类是一个代码味道.考虑一下std::vector.开销与原始new[](考虑所有需要分配的字节,无论它们在哪里)都是一个指针的字节值,其好处是无数的.