在C++中存在一个特殊函数,他就是复制构造函数,假如我们有类A,如果有A a;A b=a; 在这种情况下利用A类变量a来给同是A类变量的b来赋值,这个时候类会使用复制构造函数,如果我们不显式声明复制构造函数,那么类将会调用默认的复制构造函数。下面的代码说明了这一情况,如果我们将类StringBad中的复制构造函数StringBad(StringBad &)去掉,那么count最后输出的结果会为复制(count为静态变量用来记录类StringBad的对象个数)。
main.cpp
#include#include"StringBad.h"using namespace std;int main(){ StringBad * src=new StringBad("src"); StringBad srb("srb"); StringBad srd=srb; delete src; return 0;}
StringBad.h
#include#include using namespace std;class StringBad{public: static int count; char * name; StringBad(char * name); StringBad(StringBad &); ~StringBad();};
StringBad.cpp
#include"string.h"#include#include #include"StringBad.h"using namespace std;int StringBad::count=0;StringBad::StringBad(char * name){ this->name=new char(strlen(name)+1); strcpy(this->name,name); count++; cout<<"创建新对象"<<(this->name)<<"后,还有"< <<"个对象"< name)<<"之后,还有"< <<"个对象"< name=new char(strlen(s.name)+1); strcpy(this->name,s.name); cout<<"调用复制函数后,还有"< <<"个对象"<