我总是使用这个方法声明我的数组:
bool array[256];
但是,我最近被告知要使用以下命令声明数组:
bool* array = new bool[256];
有什么区别,哪个更好?老实说,我不完全理解第二种方式,所以对它的解释也会很有帮助。
发布于 2018-06-10 04:29:38
bool array[256];
这将分配一个具有自动storage duration的布尔数组。
当它超出范围时,它将被自动清除。在大多数实现中,如果没有声明为静态或全局,则会将其分配到堆栈上。
与替代方案相比,堆栈上的分配/释放在计算上非常便宜。它可能在数据局部性方面也有一些优势,但这不是您通常需要担心的问题。但您可能需要小心分配许多大型数组,以避免堆栈溢出。
bool* array = new bool[256];
这将分配一个具有动态存储持续时间的数组。
您需要稍后通过调用delete[]
来清理它。如果您不这样做,那么您将泄漏内存。
或者(正如@Fibble所提到的),您可以使用smart-pointers来表达所需的所有权/生命周期需求。这将把清理的责任留给智能指针类。这对保证删除很有帮助,即使在出现异常的情况下也是如此。
它的优点是可以将其传递到外部作用域和其他对象,而无需复制(RVO在某些情况下也会避免第一种情况下的复制,但将其存储为数据成员,而其他用途在第一种情况下无法优化)。
发布于 2018-06-10 05:19:56
正如前面的答案所指出的,区别在于静态分配与动态分配。有理由使用其中一个而不是另一个。Herb Sutter的这个视频解释了你什么时候应该使用什么。https://www.youtube.com/watch?v=JfmTagWcqoE它刚刚超过1个半小时。
我的偏好是使用
bool array[256];
除非有其他理由。
麦克
https://stackoverflow.com/questions/50778140
复制相似问题