Это зависит от семантики, которую вы хотите предоставить. В C ++ 11 вы, вероятно, захотите сделать что-то вроде:
Class::Class( vector<baddie*> input ) : baddies( std::move(input) ) {}
Который переместит память из копии в аргументе члену, тогда как в C ++ 03 вы, вероятно, напишите:
Class::Class( vector<baddie*> const & input ) : baddies( input ) {}
Что инициализирует вектор с копией.
Обратите внимание, что это обсуждение относится только к содержанию вектора, а не к данным, указанным указателями baddie
. То есть в обоих случаях будет два вектора с указателями для ссылки на одни и те же элементы (т. Е. Только одна копия каждого baddie
в памяти с двумя указателями на него).
В зависимости от семантики вашего приложения, вы можете перейти от этого промежуточного мелкого копирования к любому концу: выполнить глубокое копирование (то есть создать новые элементы baddie
в памяти, так что оригинал и копия полностью не связаны после завершения конструктора) или вообще не копируются, и просто сохраните ссылку / указатель так, чтобы оба вектора были в точности одинаковыми (вставка внутри или снаружи класс будет виден снаружи / внутри класса).
Кроме того, остерегайтесь вектора указателей, вам нужно вручную управлять памятью, прежде чем вектор будет уничтожен.