Four default member functions of the String class
# Include
# Include
# Pragma warning (disable: 4996) using namespace std; class String {public: String (char * p): _ ptr (new char [strlen (p) + 1]) {if (_ ptr! = 0) {strcpy (_ ptr, p) ;}} void swap (String & s) {char * tmp = s. _ ptr; s. _ ptr = _ ptr; _ ptr = tmp;} // optimized String (const String & s): _ ptr (NULL) // _ ptr must be set to NULL, otherwise, an error occurred while releasing a random value {String tmp (s. _ ptr); swap (tmp);}/* String & operator = (const String & s) {if (this! = & S) {String tmp (s. _ ptr); swap (tmp);} return * this;} * // optimal String & operator = (String s) {swap (s); return * this ;} // original version/* String (const String & s) {_ ptr = new char [strlen (s. _ ptr) + 1]; if (_ ptr! = 0) {strcpy (_ ptr, s. _ ptr) ;}} String & operator = (const String & s) {if (this! = & S) {delete _ ptr; _ ptr = new char [strlen (s. _ ptr) + 1]; if (_ ptr! = 0) {strcpy (_ ptr, s. _ ptr) ;}} return * this ;}*/~ String () {if (_ ptr) {delete [] _ ptr ;}} void Display () {cout <_ ptr <endl;} private: char * _ ptr;}; int main () {String s1 (yangrujing), s2 (yangfeipan); String s3 (s1); s3.Display (); s1 = s2; s1.Display (); getchar (); return 0 ;}