Durning the weekend Я пытаюсь обновить свои навыки на C++ и изучить некоторые C++ 11, я наткнулся на следующую проблему: я не могу заставить свой класс контейнера правильно использование шаг конструктора:Передача std :: vector to constructor and move semantics
у меня есть класс строитель, который определяется следующим образом:
class builder
{
...
container build() const
{
std::vector<items> items;
//... fill up the vector
return container(items); //should move the vector right? wrong!
//return container(std::move(items)); also doesn't work
}
}
и классы элемент и контейнер, определяется следующим образом:
class container
{
public:
container(std:vector<item> items)
: items_(items) // always invokes copy constructor on vector, never move
{ }
container(container&& rhs)
{
...
}
...
private:
std::vector<item> items_;
}
class item
{
public:
//move .ctor
item(item && rhs);
item& operator=(item && rhs);
//copy .ctor
item(const item& rhs); //this gets called instead of move .ctor
item& operator=(const item& rhs);
...
}
Теперь мой код s предполагает использование
builder my_builder;
...
auto result = my_builder.build();
, который вызывает каждый элемент будет первым построен, а затем копируется ...
Как я должен написать следующее classess не копировать элементы? Должен ли я просто вернуться к использованию стандартных указателей?
Что такое 'item2'? – Mankarse
@Mankarse это была опечатка, исправленная – ghord