1

我正在尝试做类似的事情:

using std::array;

array< array<int, 3>*, 10> arrsPtrs;

void f()
{
  arrsPtrs[0] = new array<int, 3> {1, 2, 3};         //bad!
  arrsPtrs[0] = new array<int, 3> {{1, 2, 3}};       //bad!
  arrsPtrs[0] = new array<int, 3> ( {1, 2, 3} );     //bad!
  arrsPtrs[0] = new array<int, 3> ( {{1, 2, 3}} );   //bad!
}

是否可以在这样的表达式中聚合初始化 STL 容器?

PS:可能很重要-我有VS2010。

4

1 回答 1

6

你想要arrayPtrs[0] = new array<int, 3> {{1,2,3}}

说了这么多,你为什么要这么做?拥有一个指向动态分配数组的指针数组几乎可以肯定是做任何你想做的事情的错误方式。

编辑:实际上,每次使用newC++ 时,都需要相应的delete. 与 Java 或 C#(垃圾回收)等语言不同,您应该new在现代 C++ 中很少使用 raw,因为它很容易导致内存泄漏。

基本上,而不是:

array<array<int, 3>*, 10> arrsPtrs;

相反,您想使用:

array<array<int, 3>, 10> arrsPtrs;

如果你想把它传递给一个函数,你可以简单地通过 (const) 引用传递它:

void some_function(const array<array<int, 3>, 10>& arr)
{
     ....
}
于 2014-10-25T14:11:45.057 回答