Ho una classe View e una Shape dove la View "possiede" i suoi oggetti Shape. Lo sto implementando come vettore di unique_ptr. Nella funzione View :: add_shape (std :: unique_ptr & & shape), ho ancora bisogno di usare std :: move sul parametro rvalue per renderlo compilato. Perché? (Usando GCC 4,8)è passato come parametro trattato come lvalue all'interno della funzione?
#include <memory>
#include <vector>
using namespace std;
class Shape { };
class View
{
vector<unique_ptr<Shape>> m_shapes;
public:
void add_shape(unique_ptr<Shape>&& shape)
{
m_shapes.push_back(std::move(shape));// won't compile without the std::move
}
};
int main()
{
unique_ptr<Shape> ups(new Shape);
View v;
v.add_shape(std::move(ups));
}
Grazie. Questo risponde alla domanda. Anche se penso che userò il suggerimento di MM per passare dal valore – user1057165
"si comporta come un const -valore-riferimento all'interno della funzione" non dovrebbe comportarsi come un ** non-const ** lvalue in modo che possa essere spostato da? – neuront
@neuront Sì, grazie per averlo fatto notare. Ora è stato risolto, insieme ad alcuni refusi. :) –