c++ - 堆上数组的初始化

标签 c++ memory-management heap-memory stack-memory

如何在堆上手动初始化数组中的值? 如果数组是局部变量(在堆栈中),则可以非常优雅且简单地完成,如下所示:

int myArray[3] = {1,2,3};

不幸的是,下面的代码

int * myArray = new int[3];
myArray = {1,2,3};

通过编译输出错误

error: expected primary-expression before ‘{’ token
error: expected `;' before ‘{’ token

我必须使用循环,还是像这样不太优雅的方式?

myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 3;

最佳答案

今天可以使用以下语法来完成:

int * myHeapArray = new int [3] {1, 2, 3};

请注意,您必须将分配的结构的大小与初始化列表的大小相匹配。

由于我是在回答几年前发布的问题,因此值得一提的是,现代 C++ 不鼓励使用 newdelete 和 native (或裸)指针.更倾向于使用诸如 std::unique_ptrstd::shared_ptr 之类的处理程序,因为它们会自动释放它们拥有的内存(检查 RAII idiom)。

在这种特殊情况下,std::vector 将提供所有这些功能:堆分配数据、使用初始化列表(如 {1, 2, 3})、处理程序和移动语义等功能。

对于堆栈分配的数组,如果需要,可以考虑 std::array

关于c++ - 堆上数组的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4571155/

相关文章:

c++ - 使用私有(private)方法设置类变量

c++ - 从内存中获取文件句柄

delphi - 哪种情况下堆分配更轻/更重?

java - 另一个线程的代码如何在主线程上运行?

java - JVM 同时终止并显示错误代码 143

c++ - 读取多个 .txt 文件 c++ linux

c++ - 用于矩阵堆栈的 openGL

c++ - 是否可以参数化模板化成员函数的常量?

c - calloc 和 malloc 可以分配多少内存?

Android:对于 Canvas 动画,最好有 1 个大线程,或多个小线程