#includeusing namespace std; class A { public: A(const char* s= "no data"); void Show(); ~A(); private: char* str; }; A::A(const char* s) { str = new char[strlen(s) + 1]; strcpy_s(str, strlen(s) + 1, s); } void A::Show() { cout << str << endl; } A::~A() { delete[] str; } int main() { A* p = new A("hello world"); A a1; a1 = *p;//这个只是单纯的属性值拷贝 a.str = p.str ,两个str指向了相同的地址 a1.Show();//所谓的浅拷贝 delete p; a1.Show(); return 0; }
#includeusing namespace std; class A { public: A(const char* s= "no data"); A& operator=(const A& a); void Show(); ~A(); private: char* str; }; A::A(const char* s) { str = new char[strlen(s) + 1]; strcpy_s(str, strlen(s) + 1, s); } A& A::operator=(const A& a) { if (str != NULL) { delete[] str; } str = new char[strlen(a.str) + 1]; strcpy_s(str, strlen(a.str) + 1, a.str); return *this; } void A::Show() { cout << str << endl; } A::~A() { delete[] str; } int main() { A* p = new A("hello world"); A a1; a1 = *p; a1.Show(); delete p; a1.Show(); return 0; }



