c++ - 数组声明之间的区别

标签 c++ arrays boolean declaration

我一直使用这种方法声明我的数组:

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/

相关文章:

c++ - 为什么这个可变参数计数宏在 VC++ 中失败?

c++ - 三角形二维数组比矩形数组占用更多内存

javascript - 仅当 Promise 解析时才使用 JS Array.push

java - 将对象初始化为二维数组然后打印它

c++ - OpenGL - 使用片段着色器得到奇怪的结果

c++ - Qt创建移动设备原型(prototype)工具

c# - 最大数组维度,如 a[1][1][1][1]....[1]在 C#

java - 尝试分配较弱的访问权限; isCancelled 是公共(public)错误

Java - Selenium - boolean 方法总是返回 false

Python 2.7 查找一个字符串的某些变位词是否是另一个字符串的子字符串