果然,光看书是没用的,一编程序,很多问题就出现了--注意事项:1、 如果构造函数中适用了new初始化指针成员,则构析函数中必须要用delete2、 new与delete必须兼容,new对应delete,new[]对应delete[]3、如果有多个构造函数,则必须以相同的方式使用new,要么都是new,要么都是new[],因为构析函数只能有一个4、 应该定义一个复制构造函数,通过深度复制,将一个对象初始化为另一个对象5、 应该定义一个赋值运算符,通过深度复制,将一个对象复制给另一个对象#include#include #include using namespace std;class String{private: char *str; int len; static int num_string;public: String(); String(const char *s); String(const String &s); ~String(); friend ostream& operator<<(ostream &os,String s); String operator=(const String &s) { if(this==&s) return *this; len=s.len; delete [] str; str=new char[len+1]; strcpy(str,s.str); return *this; }};int String::num_string=0;String::String(){ len=4; str=new char[len+1]; strcpy(str,"C++"); num_string++;}String::String(const char *s){ len=strlen(s); str=new char[len+1]; strcpy(str,s); num_string++;}String::String(const String &s){ len=s.len; num_string++; str=new char[len+1]; strcpy(str,s.str);}String::~String(){ num_string--; delete [] str; printf("--- %d\n",num_string);}ostream& operator<<(ostream &os,String s){ os<