///////////////////////////////////////////////////////////////////// // MT2Q10.cpp #include ////////////////////////////////////////// // class that shares its reference // could have state lifetime problems class B1 { public: B1(std::string& str) : s(str) {} B1(const B1& b); void say() { std::cout << "\n " << s.c_str(); } private: std::string& s; }; B1::B1(const B1& b) : s(b.s) {} //////////////////////////////////////////// // class that does not share its reference // but, then why hold a reference? class B2 { public: B2(std::string& str) : s(*new std::string(str)) {} B2(const B2& b); ~B2() { delete &s; } void say() { std::cout << "\n " << s.c_str(); } private: std::string& s; }; B2::B2(const B2& b) : s(*new std::string(b.s)) {} void main() { std::string str = "I'm a B1 object"; B1 b1a(str); b1a.say(); B1 b1b = b1a; b1b.say(); std::cout << "\n\n"; str = "I'm a B2 object"; B2 b2a(str); b2a.say(); B2 b2b = b2a; b2b.say(); std::cout << "\n\n"; }