Я пытаюсь создать vector
из unique_ptr
s, которые будут управлять группой объектов, которые все наследуются от одного и того же родительского объекта.
Так, например:
Класс A (родитель) -> Класс B (ребенок A) -> Класс C (ребенок B)
std::vector<std::unique_ptr<A>> all_objs_;
Итак, я знаю, что для добавления объектов к этому vector
я должен создать так:
std::unique_ptr<C> tmp_obj(new C());
all_objs_.push_back( std::move(tmp_obj) );
Пока все работает хорошо. На самом деле он правильно перемещает все переменные в C.
Однако, хотя я включил конструкторы копирования, назначение копирования, конструкторы перемещения, функции перемещения в каждый из 3 моих классов, они на самом деле не вызывают при выполнении std :: move.
Я проверил это, добавив std::cout << "test\n";
к каждой из четырех функций. А также, пытаясь изменить некоторую произвольную переменную.
Мои функции назначения / копирования перемещения выглядят следующим образом:
A& A::operator=(const A&& other) { std::cout << "test\n";}
A::A::(const A&& other) { std::cout << "test\n";}
B& B::operator=(const B&& other) { std::cout << "test\n";}
B::B(const B&& other) : A(other) { std::cout << "test\n";}
C& C::operator=(const C&& other) { std::cout << "test\n";}
C::C(const C&& other) : B(other) { std::cout << "test\n";}
Также пытались создать функции назначения / копирования перемещения следующим образом:
A& A::operator=(const std::unique_ptr<A>&& other) {std::cout << "test\n";}
A::A(const std::unique_ptr<A>&& other) {std::cout << "test\n";}
Итак, хотя мой код технически работает, я понятия не имею, как и почему. Также при полном удалении функций перемещения я получаю ошибки.