Почему вы используете new
, когда не нужно создавать динамическую память? Конечно, использование new
не удастся, это приведет к foo*
, когда push_back
примет foo
. (Это то, что у вас есть вектор, в конце концов.)
Что не так с push_back
? Если вы хотите зарезервировать память заранее, используйте reserve()
; предоставление числа в конструкторе vector
делает столько копий второго параметра (который неявно равен foo()
, который не будет работать, следовательно, ваши ошибки), что не то же самое, что просто резервирование памяти.
Если все происходит правильно (нет new
), происходит сбой, ошибка в вашем коде, а не в векторе. Возможно, вы не написали правильный класс, который управляет ресурсами. * (Помните Большая тройка , используйте идиома копирования и замены .)
* Я говорю это, потому что вы говорите "//arrays whose length depend upon arg1 and arg2
", что, я подозреваю, означает, что у вас есть new[]
в вашем классе где-то. Без Большой Тройки ваше управление ресурсами потерпит неудачу.
Вы все равно не должны управлять ресурсами, классы несут одну ответственность. Это означает, что он должен быть либо динамическим массивом, либо использовать динамический массив, но не одновременно управлять и использовать динамический массив. Поэтому выделите ресурсы в их собственный класс, а затем создайте другой (ваш) класс, который их использует. Динамический массив - std::vector
, так что вы уже закончили с этим. В любой раз, когда вам нужен динамический массив, используйте vector
; нет причины не делать этого.