- #include <algorithm> 
- #include <cstring> 
- #include <iostream> 
-   
- class A 
- { 
-     public: 
-        // construct from string 
-        A () : str(new char[1]()) {} 
-   
-        A(const char *s) : str(new char[strlen(s) + 1]) 
-        { strcpy(str, s); } 
-   
-        // copy construct 
-        A(const A& rhs) : str(new char[strlen(rhs.str) + 1]) 
-        { strcpy(str, rhs.str); } 
-   
-        // destruct 
-        ~A() { delete []  str; } 
-   
-        // assign 
-        A& operator=(const A& rhs) 
-        { 
-           A temp(rhs); 
-           std::swap(str, temp.str); 
-           return *this; 
-        } 
-   
-        // implement 
-        void setStr(char * s) 
-        { 
-           A temp(s); 
-           *this = temp; 
-        }   
-   
-        const char* getStr() { return str; } 
-   
-      private: 
-         char * str; 
- }; 
-   
- using namespace std; 
-   
- int main() 
- { 
- 	A a1; 
- 	a1.setStr("abc"); 
- 	A a2; 
- 	a2 = a1; 
- 	A a3 = a1; 
- 	a2.setStr("456"); 
- 	cout << a1.getStr() << "\n" << a2.getStr() << "\n" << a3.getStr(); 
- } 
-   
-   
				I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCmNsYXNzIEEKewogICAgcHVibGljOgogICAgICAgLy8gY29uc3RydWN0IGZyb20gc3RyaW5nCiAgICAgICBBICgpIDogc3RyKG5ldyBjaGFyWzFdKCkpIHt9CgogICAgICAgQShjb25zdCBjaGFyICpzKSA6IHN0cihuZXcgY2hhcltzdHJsZW4ocykgKyAxXSkKICAgICAgIHsgc3RyY3B5KHN0ciwgcyk7IH0KICAgICAgIAogICAgICAgLy8gY29weSBjb25zdHJ1Y3QKICAgICAgIEEoY29uc3QgQSYgcmhzKSA6IHN0cihuZXcgY2hhcltzdHJsZW4ocmhzLnN0cikgKyAxXSkKICAgICAgIHsgc3RyY3B5KHN0ciwgcmhzLnN0cik7IH0KCiAgICAgICAvLyBkZXN0cnVjdAogICAgICAgfkEoKSB7IGRlbGV0ZSBbXSAgc3RyOyB9CgogICAgICAgLy8gYXNzaWduCiAgICAgICBBJiBvcGVyYXRvcj0oY29uc3QgQSYgcmhzKQogICAgICAgewogICAgICAgICAgQSB0ZW1wKHJocyk7CiAgICAgICAgICBzdGQ6OnN3YXAoc3RyLCB0ZW1wLnN0cik7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICB9CgogICAgICAgLy8gaW1wbGVtZW50CiAgICAgICB2b2lkIHNldFN0cihjaGFyICogcykKICAgICAgIHsKICAgICAgICAgIEEgdGVtcChzKTsKICAgICAgICAgICp0aGlzID0gdGVtcDsKICAgICAgIH0gIAoKICAgICAgIGNvbnN0IGNoYXIqIGdldFN0cigpIHsgcmV0dXJuIHN0cjsgfQogICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICBjaGFyICogc3RyOwp9OwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkKewoJQSBhMTsKCWExLnNldFN0cigiYWJjIik7CglBIGEyOwoJYTIgPSBhMTsKCUEgYTMgPSBhMTsKCWEyLnNldFN0cigiNDU2Iik7Cgljb3V0IDw8IGExLmdldFN0cigpIDw8ICJcbiIgPDwgYTIuZ2V0U3RyKCkgPDwgIlxuIiA8PCBhMy5nZXRTdHIoKTsKfQoJCg==