Bonsoir,
Je pensais avoir compris à l’aide de ce post sur StackOverflow comment passer un unique_ptr
à une méthode. Or apparemment non. J’ai créé deux classes pour m’y essayer : Song
et Library
. La deuxième a un attribut qui est un vector
de la première.
1 2 3 4 5 6 7 | Song::Song(const std::string &title, const std::string &artist) : title(title), artist(artist) {} void Song::print() const { std::cout << getTitle() << " by " << getArtist() << std::endl; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Library { public: Library(); void addSong(std::unique_ptr<Song> &song); std::vector<std::unique_ptr<Song>> get() const; private: std::vector<std::unique_ptr<Song>> library = std::vector<std::unique_ptr<Song>>(); }; Library::Library() {} void Library::addSong(std::unique_ptr<Song> &song) { library.push_back(std::move(song)); } std::vector<std::unique_ptr<Song>> Library::get() const { return library; } |
Voici ce que je fais dans mon main
:
1 2 3 4 5 6 7 8 9 10 11 12 | int main() { auto library = Library(); auto song = std::make_unique<Song>("Sunset Lover", "Petit Biscuit"); song->print(); library.addSong(song); library.get()[0]->print(); return 0; } |
J’ai le droit à la fameuse erreur :
1 | error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Song; _Dp = std::default_delete<Song>]' |
Pourtant mon pointeur est passé en référence à ma méthode et ensuite déplacé avec std::move
, il ne me semble pas en faire une copie à un seul moment ici.
Merci pour votre aide !
+0
-0