Начиная с C ++ 11, безопасный для памяти способ сделать это (все еще используя аналогичную конструкцию) с помощью std::unique_ptr
:
std::unique_ptr array(new int[n]);
Это создает умный указатель на блок памяти, достаточно большой для целых чисел n
, который автоматически удаляет себя, когда он выходит из области видимости. Эта автоматическая очистка важна, потому что она избегает сценария, когда ваш код рано уходит и никогда не достигает вашего оператора delete [] array;
.
Другой (вероятно, предпочтительный) вариант должен был бы использовать std::vector
, если вам нужен массив, способный к динамическому изменению размера. Это хорошо, когда вам нужно неизвестное пространство, но оно имеет некоторые недостатки (непостоянное время для добавления / удаления элемента). Вы можете создать массив и добавить к нему элементы с чем-то вроде:
std::vector array;
array.push_back(1); // adds 1 to end of array
array.push_back(2); // adds 2 to end of array
// array now contains elements [1, 2]
Хорошо, ваши параметры переданы, но не в правильном пространстве имен. Вместо select_tag
вы должны использовать метод f.select
:
<%= f.select(:city_id, options_for_select(City.pluck(:name, :id), target_blank: true )) %>
И также для второго из ваших параметров.