Podczas weekendu próbuję odświeżyć moje umiejętności C++ i nauczyć się C++ 11, natknąłem się na następujący problem: Nie mogę wymusić prawidłowej klasy kontenera konstruktor użycie ruch:Przekazywanie std :: wektor do semantyki konstruktora i ruchu
mam klasy Builder, który jest zdefiniowany w następujący sposób:
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
}
}
i klasy element i kontener, zdefiniowane następująco:
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);
...
}
teraz mój kod s sugerować zastosowanie
builder my_builder;
...
auto result = my_builder.build();
co powoduje, każdy element, który ma być najpierw skonstruowany i następnie kopiowane ...
Jak mam napisać po classess aby nie kopiować? Czy powinienem wrócić do używania standardowych wskaźników?
Co to jest "item2"? – Mankarse
@Mankarse to był literówka, poprawiony – ghord