拷贝构造函数

来源:互联网 发布:clover软件官网 编辑:程序博客网 时间:2024/05/29 04:45

类机制中有默认的赋值操作符,只要定义了类,就可以进行对象的赋值操作。

Person p1("Jack");

Person p2;

p2=p1;

但是默认的赋值操作符只管对象本体的复制,如果对象之间要做深拷贝的话,则必须自定义赋值操作符。自定义赋值操作符必须注意,原来的对象已经存在,要先将原来的资源释放掉,然后再进行深拷贝的复制。

//---------main.cpp------------#include <iostream>#include <string>//拷贝构造函数using namespace std;class Person{private:char *pName;public:Person(char *pN="noName"){std::cout<<"constructing  "<<pN<<endl;pName=new char[strlen(pN)+1];if(pName)strcpy(pName,pN);}Person(const Person &s){std::cout<<"copy constructing "<<s.pName<<endl;pName=new char[strlen(s.pName)+1];if(pName) strcpy(pName,s.pName);}Person & operator=(Person &s)     //前置  (  )={std::cout<<"assigning "<<s.pName<<endl;if(this==&s) return s;delete[] pName;pName = new char[strlen(s.pName)+1];if(pName) strcpy(pName,s.pName);}~Person(){std::cout<<"destructing "<<pName<<endl;}};int main(int argc,char **argv){Person p1("Jack");Person p2("Sam");p2=p1;                     //等同于  p2.operator=(p1);return 0;}

constructing  Jack
constructing  Sam
assigning Jack
destructing Jack
destructing Jack
请按任意键继续. . .






1


0 0