Rad*_*mko 12 c++ heap stack memory-management
如何在堆上手动启动数组中的值?如果数组是局部变量(在堆栈中),它可以非常优雅和简单的方式完成,如下所示:
int myArray[3] = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
不幸的是,遵循代码
int * myArray = new int[3];
myArray = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
通过编译输出错误
error: expected primary-expression before ‘{’ token
error: expected `;' before ‘{’ token
Run Code Online (Sandbox Code Playgroud)
我是否必须使用这样的循环,或者不那么优雅的方式?
myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 3;
Run Code Online (Sandbox Code Playgroud)
今天可以使用以下语法来完成此操作:
int * myHeapArray = new int [3] {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
请注意,您必须将分配的结构的大小与初始值设定项列表的大小相匹配。
由于我正在回答几年前发布的问题,因此值得一提的是,现代 C++ 不鼓励使用new,delete和本机(或裸)指针。相反,使用诸如std::unique_ptr和 之类的处理程序std::shared_ptr更受青睐,因为它们会自动释放它们拥有的内存(检查RAII习惯用法)。
在这种特殊情况下,std::vector将提供所有这些功能:堆分配的数据,使用初始化列表(例如{1, 2, 3})的使用、处理程序和移动语义等功能。
对于堆栈分配的数组,std::array如果您需要的话,可以考虑它们。
小智 5
这很有趣:将数组推入向量
但是,如果这对您不起作用,请尝试以下操作:
#include <algorithm>
...
const int length = 32;
int stack_array[length] = { 0 ,32, 54, ... }
int* array = new int[length];
std::copy(stack_array, stack_array + length, &array[0]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29831 次 |
| 最近记录: |