В настоящее время я оптимизирую свой код, и у меня есть вопрос относительно std :: vector
У меня есть класс MyClass, в который я переписал конструктор копирования / перемещения и соответствующие им операторы.
MyClass(const std::string& id, int x);
MyClass(const MyClass& other);
MyClass(MyClass&& other);
~MyClass();
MyClass& operator=(const MyClass& other);
MyClass& opratror*(MyClass&& other);
Я создал вектор и попробовал следующее
std::vector<MyClass> vec;
MyClass a("A", 1);
vec.push_back(a); //#1
vec.emplace_back("B", 2); //#2
vec.push_back(MyClass("C", 3)); //#3
в # 1 вызывается конструктор копирования (который, как я знаю, хранит вектор по значениям, поэтому он копирует a) в # 2он сохраняет вызов конструктора копирования, только вызывает конструктор в # 3, он вызывает конструктор и конструктор перемещения
Но я обнаружил, что в # 2, # 3, где вектор не пуст, каждый толчок назад /emplace / emplace_back запускает копирование / уничтожение существующих элементов.
в # 2, копирует «A» и уничтожает существующую «A» в # 3, делает то же самое с «A» и «B»
кажется, что вектор изменяет все элементы всякий раз, когда изменяется массив.Означает ли это, что использование вектора класса может сделать вещи неэффективными?Является ли это лучшим решением для использования вектора, хранящего указатели, чтобы при вызове не было вызовов копирования / деструкторов, а только копирование указателей?
Спасибо