类机制中有默认的赋值操作符,只要定义了类,就可以进行对象的赋值操作。
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