Rod*_*ton 5 c++ arrays std unique-ptr
通过书籍和网上,直到我的耳朵之间有很大的疼痛发作搜索后,我无法弄清楚如何将添加std::unique_ptr到std::array。
以下是班级成员:
std::array<std::unique_ptr<Media>, MAX_ELMS_NUM> m_collection;
Run Code Online (Sandbox Code Playgroud)
在.cpp文件中,我试图将新的媒体指针填充std::unique_ptr到数组中:
Media* newMedia = CreateNewMedia(Media info stuff);
unique_ptr<Media> np(newMedia);
m_collection[0] = np;
Run Code Online (Sandbox Code Playgroud)
除最后一行外,所有内容都会编译。
std::unique_ptr无法复制,但可以移动,因为它是独一无二的。你可以使用std::move.
类 (std::unique_ptr) 满足 MoveConstructible 和 MoveAssignable 的要求,但不满足 CopyConstructible 或 CopyAssignable 的要求。
std::move 用于指示对象 t 可以“移出”,即允许将资源从 t 有效转移到另一个对象。
Media* newMedia = CreateNewMedia(Media info stuff);
unique_ptr<Media> np(newMedia);
m_collection[0] = std::move(np);
~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
顺便说一句:正如@MM提到的,使用std::unique_ptr::reset也可以解决你的问题,并且通过避免所有临时变量来更清楚。
m_collection[0].reset(CreateNewMedia(Media info stuff));
Run Code Online (Sandbox Code Playgroud)