首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组声明之间的差异

数组声明之间的差异
EN

Stack Overflow用户
提问于 2018-06-10 04:13:16
回答 2查看 68关注 0票数 -1

我总是使用这个方法声明我的数组:

代码语言:javascript
复制
bool array[256];

但是,我最近被告知要使用以下命令声明数组:

代码语言:javascript
复制
bool* array = new bool[256];

有什么区别,哪个更好?老实说,我不完全理解第二种方式,所以对它的解释也会很有帮助。

EN

回答 2

Stack Overflow用户

发布于 2018-06-10 04:29:38

代码语言:javascript
复制
bool array[256];

这将分配一个具有自动storage duration的布尔数组。

当它超出范围时,它将被自动清除。在大多数实现中,如果没有声明为静态或全局,则会将其分配到堆栈上。

与替代方案相比,堆栈上的分配/释放在计算上非常便宜。它可能在数据局部性方面也有一些优势,但这不是您通常需要担心的问题。但您可能需要小心分配许多大型数组,以避免堆栈溢出。

代码语言:javascript
复制
bool* array = new bool[256];

这将分配一个具有动态存储持续时间的数组。

您需要稍后通过调用delete[]来清理它。如果您不这样做,那么您将泄漏内存。

或者(正如@Fibble所提到的),您可以使用smart-pointers来表达所需的所有权/生命周期需求。这将把清理的责任留给智能指针类。这对保证删除很有帮助,即使在出现异常的情况下也是如此。

它的优点是可以将其传递到外部作用域和其他对象,而无需复制(RVO在某些情况下也会避免第一种情况下的复制,但将其存储为数据成员,而其他用途在第一种情况下无法优化)。

票数 3
EN

Stack Overflow用户

发布于 2018-06-10 05:19:56

正如前面的答案所指出的,区别在于静态分配与动态分配。有理由使用其中一个而不是另一个。Herb Sutter的这个视频解释了你什么时候应该使用什么。https://www.youtube.com/watch?v=JfmTagWcqoE它刚刚超过1个半小时。

我的偏好是使用

代码语言:javascript
复制
bool array[256]; 

除非有其他理由。

麦克

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档