Я пытаюсь сделать что-то вроде:
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.
Ты хочешь arrayPtrs[0] = new array<int, 3> {{1,2,3}}
,
Сказав, почему ты это делаешь? Наличие массива указателей на динамически распределяемые массивы почти наверняка является неправильным способом выполнения всего, что вы пытаетесь сделать.
Редактировать: эффективно, каждый раз, когда вы new
что-то в C ++, вам нужно соответствующее delete
, В отличие от языков, таких как Java или C # (которые собирают мусор), вы редко должны использовать raw new
в современном C ++, так как это может очень легко привести к утечкам памяти.
В основном вместо:
array<array<int, 3>*, 10> arrsPtrs;
Вы вместо этого хотели бы использовать:
array<array<int, 3>, 10> arrsPtrs;
Если вы хотите передать это в функцию, вы можете просто передать ее по (const) ссылке:
void some_function(const array<array<int, 3>, 10>& arr)
{
....
}