【问题标题】:Is it possible to initialise an array in C++ 11 by using new operator是否可以使用 new 运算符在 C++ 11 中初始化数组
【发布时间】:2013-03-03 08:02:50
【问题描述】:

大家好,我想像这样在 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 容器数组,有人可以告诉我是使用普通数组还是 STL 数组可以实现这一点

【问题讨论】:

    标签: c++ arrays stl new-operator


    【解决方案1】:

    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 来完成吗?如果可以,请告诉我怎么做,因为我需要将共享指针传递给函数
    • 我在我的程序中尝试了std::vector&lt;int&gt; Barray = {1,2,4,6,0,0,0} ;,但在该行出现错误。MVS2012 是否支持初始化列表
    • @bourne 我不知道,可能不是。 GCC 确实如此。
    • 你能解释一下为什么我们必须在std::shared_ptr&lt;int&gt; ptr(new int[5]{1,2,3,4,5}, std::default_delete&lt;int[]&gt;());这一行中提到std::default_delete&lt;int[]&gt;()
    • @bourne shared_ptr 不像 unique_ptr 那样专门用于 int[],因此它会调用 delete 而不是 delete[] 没有它。请记住,shared_ptr 并非用于存储动态数组。
    【解决方案2】:

    感谢 C++11 和统一初始化,您可以:

    int main()
    {
        int* p = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        // ...
        delete[] p;
    }
    

    live demo

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 2017-06-04
      • 2016-03-03
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      相关资源
      最近更新 更多