堆上数组的初始化

2024-02-16

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

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++ 不鼓励使用new, delete和本机(或裸)指针。使用处理程序,例如std::unique_ptr and std::shared_ptr相反,它们受到青睐,因为它们会自动释放它们拥有的内存(检查RAII https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization idiom).

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

堆上数组的初始化 的相关文章

随机推荐