1 class String { 2 public: 3 String(char* pp) :sz(strlen(pp)), p(new char[sz+1]) { strcpy(p,pp); } 4 ~String() { delete[] p; } 5 char& operator[](int i) { return p; } 6 private: 7 int sz; 8 char* p; 9 }; 10 11 void f(char* x) 12 { 13 String s1(x); 14 String s2 = s1; 15 }
14:String s2 = s1,s2调用默认拷贝构造函数,s2.p 和 s1.p是指向同一个内存。所以会存在对同一块内存的两次delete
写带指针成员变量的类要注意才行
参考:这里