在C++ 11中,是否可以使用new运算符初始化数组?

3

大家好,我想在C ++中像这样初始化一个数组

int array[10]={1,2,3,4,5,6,7,8,9,10};

但我正在使用 new 操作符。

我知道我可以像下面这样做,然后迭代并分配值

shared_ptr<int[]> l (new int[7]);

但我真的很希望能有一种方法在新命令期间进行初始化

类似于这样 shared_ptr<int[]> l (new int[7] ={1,2,3,4,5,6,7}); 但可悲的是,这不是有效的语法。

此外,在C++ 11标准中添加了一个新的STL容器Array,请问是否可以使用普通数组或STL Array实现此目标?

2个回答

9

C++11为容器提供了一个initializer_list,其工作方式如下:

std::vector<int> array = {1,2,3,4,5};

vector 是动态数组类。


以下是 shared_ptr的版本:

std::shared_ptr<int> ptr(new int[5]{1,2,3,4,5}, std::default_delete<int[]>());

但是它可以通过 shared_ptr 和 new 来完成吗?如果可以,请告诉我如何操作,因为我需要将共享指针传递给一个函数。 - bourne
我在我的程序中尝试使用std::vector<int> Barray = {1,2,4,6,0,0,0} ;,但是它在那一行报错。MVS2012支持初始化列表吗? - bourne
@bourne 我不知道,可能不行。GCC肯定可以。 - Pubby
请问为什么我们需要在这一行中提到 std::default_delete<int[]>(),即 std::shared_ptr<int> ptr(new int[5]{1,2,3,4,5}, std::default_delete<int[]>()); - bourne
@bourne shared_ptr 没有像 unique_ptr 一样为 int[] 进行专门的特化处理,因此如果没有它的话会调用 delete 而不是 delete[]。请记住,shared_ptr 不适用于存储动态数组。 - Pubby
显示剩余2条评论

0
感谢C++11和统一初始化,你可以做到以下几点:
int main()
{
    int* p = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    // ...
    delete[] p;
}

实时演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接