Sebbene abbia lavorato per diversi anni con C#, fare qualcosa in C++ è ancora difficile per me. Approvo pienamente l'uso di puntatori intelligenti, ma ora mi trovo di fronte al seguente puzzleErrore durante la dichiarazione di una classe con std :: vector di struct contenenti std :: unique_ptr
Ho una struttura Foo
, ad es.
struct Foo
{
Foo(std::unique_ptr<Bar> bar) : m_myBar(std::move(bar)) {}
private:
std::unique_ptr<Bar> m_myBar;
};
in una classe diversa, voglio avere un vettore che contiene le istanze di Foo, ma la seguente riga
std::vector<Foo> m_Foos;
rendimenti errori di compilazione dicendo che il costruttore di copia viene eliminata. Nel thread SO "Why can I not push_back a unique_ptr into a vector?" viene fornita una spiegazione e un rimedio. Tuttavia, la domanda riguarda un vettore di puntatori univoci, mentre io ho un vettore di strutture contenente un puntatore univoco. La soluzione suggerita è usare la semantica del movimento, ma come si applica nella mia situazione? O dovrei fare qualcos'altro?
Si sta utilizzando Visual Studio? – Angew
No, sto usando Qt Creator 3.1.2 basato su Qt 5.3.1 con mingw32-make.exe. È importante? – SimonAx
Quale compilatore? Presumo mingw gcc, che dovrebbe essere OK. Il compilatore di Visual Studio non può generare automaticamente i sensori di movimento. Ma la stessa linea vettoriale non sta causando l'errore, vedi il link nella mia risposta. È forse racchiuso in una classe, che influenzerebbe il copyctor di quella classe? IOW, per favore pubblica un [MCVE] (http://stackoverflow.com/help/mcve). – Angew