#include<iostream> #include<stdio.h> using namespace std; class String { public: char* get(){return m_data;} String(const char *str=NULL); String(const String& other); ~String(); String& operator=(const String& other); private: char *m_data; }; String::String(const char* str) { cout<<"构造函数被调用了"<<endl; if(str==NULL) { m_data=new char[1]; *m_data='/0'; } else { int length=strlen(str); m_data=new char[length+1]; strcpy(m_data,str); } } String::~String() { delete m_data; cout<<"析构函数被调用了"<<endl; } String::String(const String& other) { cout<<"复制构造函数被调用了"<<endl; int length=strlen(other.m_data); m_data=new char[length+1]; strcpy(m_data,other.m_data); } String& String::operator=(const String& other) { cout<<"赋值函数被调用了"<<endl; if(this==&other) return *this; delete m_data; int length=strlen(other.m_data); m_data=new char[length+1]; strcpy(m_data,other.m_data); return *this; } void main() { String b; cout<<b.get()<<endl; String a("Hello"); cout<<a.get()<<endl; String c("World"); cout<<c.get()<<endl; String d=a; cout<<d.get()<<endl; d=c; cout<<d.get()<<endl; } 也算个经典问题吧.