我一直使用这种方法声明我的数组:
bool array[256];
但是,我最近被告知要使用以下方式声明我的数组:
bool* array = new bool[256];
有什么区别,哪个更好?老实说,我不完全理解第二种方式,所以对此的解释也会有所帮助。
最佳答案
bool array[256];
这会分配一个带有自动 storage duration 的 bool 数组.
超出作用域会自动清理。 在大多数实现中,如果它没有声明为静态或全局,它将在堆栈上分配。
与替代方案相比,堆栈上的分配/取消分配在计算上非常便宜。它也可能对数据本地化有一些优势,但这不是您通常需要担心的事情。但是您可能需要小心分配许多大型数组以避免堆栈溢出。
bool* array = new bool[256];
这会分配一个具有动态存储持续时间的数组。
您需要调用 delete[]
自行清理它稍后的。如果不这样做,就会泄漏内存。
或者(如@Fibbles 所述)您可以使用 smart-pointers表达所需的所有权/生命周期要求。这会将清理的责任留给智能指针类。这有助于保证删除,即使在异常情况下也是如此。
它的优点是无需复制就可以将其传递给外部作用域和其他对象(RVO 在某些情况下也会避免第一种情况的复制,但不能将其存储为数据成员和其他用途)在第一种情况下优化)。
关于c++ - 数组声明之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50778140/