#include #include #include class Bad{ public: Bad(std::string& s):message(s){} private: std::string& message; }; class Good{ public: Good(std::string& s):message(s){} std::string getMessage(){ return message.get(); } void changeMessage(std::string s){ message.get()= s; } private: std::reference_wrapper message; }; int main(){ std::cout << std::endl; std::string bad1{"bad1"}; std::string bad2{"bad2"}; Bad b1(bad1); Bad b2(bad2); //b1= b2; std::string good1{"good1"}; std::string good2{"good2"}; Good g1(good1); Good g2(good2); std::cout << "g1.getMessage(): " << g1.getMessage() << std::endl; std::cout << "g2.getMessage(): " << g2.getMessage() << std::endl; std::cout << std::endl; std::cout << "g2= g1" << std::endl; g2= g1; std::cout << "g1.getMessage(): " << g1.getMessage() << std::endl; std::cout << "g2.getMessage(): " << g2.getMessage() << std::endl; std::cout << std::endl; g1.changeMessage("veryGood"); std::cout << "g1.changeMessage(\"veryGood\")" << std::endl; std::cout << "g1.getMessage(): " << g1.getMessage() << std::endl; std::cout << "g2.getMessage(): " << g2.getMessage() << std::endl; std::cout << std::endl; }