Как агрегировать-инициализировать контейнер STL в выражении с новым оператором?

Я пытаюсь сделать что-то вроде:

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.

1

Решение

Ты хочешь 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)
{
....
}
6

Другие решения


По вопросам рекламы [email protected]