[英]What happened when assigning an rvalue reference to lvalue?
我有一個簡單的例子:
void Message::move_Folders(Message *m) {
m_folders = std::move(m->m_folders);
for (auto f : m_folders) {
f->removeMessage(m);
f->addMessage(this);
}
m->m_folders.clear();
}
這個 function 可以將“文件夾”成員從一個移動到另一個。 所以我想知道:我需要為“文件夾”提供移動分配 function 嗎?
folders &operator=(folders &&f) {
...
}
將右值引用分配給左值時發生了什么? 還是復制操作嗎? (我相信不會。)
注意:文件夾是一組文件夾對象。 一條消息可能屬於許多文件夾。 所以一條消息包含一組文件夾。 該文件夾也有一個成員messages
。 一個文件夾可能包含許多消息。 這有點復雜。
這是Message
和Folder
的定義:
class Message {
public:
// constructor and destructor
...
private:
std::set<Folder *> m_folders;
...
};
class Folder {
friend class Message;
//constructor and destructor
...
private:
std::set<Message *> m_messages;
};
謝謝
注意std::move
不會移動任何東西; 相反,它使事物可移動。 因此,為了實際將m->folders
移動到this->folders
中,移動分配確實必須執行該邏輯。
事實上,移動分配應該負責定義移動語義: move_folders
方法不必清除m->folders
,因為它不應該知道這個細節。
您不需要提供移動分配運算符,但如果您不這樣做,調用確實會降級為副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.