第十三章拷贝控制
习题
#include <iostream> #include <string> #include <set> class Message { friend class Folder; public: explicit Message(const std:: &str = "") : contents(str) { } Message(const Message &); Message& operator=(const Message&); ~Message(); void save(Folder &); void remove(Folder &); private: std::string contents; std::set<Folder*> folders; void add_to_folders(const Message&); void remove_from_Folders(); }; class Folder { friend void swap(Folder &, Folder &); friend class Message; public: Folder() = default; Folder(const Folder &); Folder& operator=(const Folder &); ~Folder(); void print_debug(); private: std::set<Message*> msgs; void add_to_Message(const Folder&); void remove_from_Message(); void addMsg(Message *m) { msgs.insert(m); } void remMsg(Message *m) { msgs.erase(m); } }; void Message::save(Folder &f) { folders.insert(&f); f.addMsg(this); } void Message::remove(Folder &f) { folders.erase(&f); f.remMsg(this); } void Message::add_to_Folders(const Message &m) { for (auto f : m.folders) f->addMsg(this); } void Message::remove_from_Folders() { for (auto f : folders) f->remMsg(this); } Message::~Message() ( remove_from_Folders(); ) Message& Message::operator=(const Message &rhs) { remove_from_Folders(); contents = rhs.contents; folders = rhs.folders; add_to_Folders(rhs); return 8this; }