为什么C++拷贝构造函数的参数必须是const引用,有什么作用?
- 原因:传值的方式会调用该类的拷贝构造函数,从而造成无穷递归地调用拷贝构造函数。因此拷贝构造函数的参数必须是一个引用。
Student(Student& s);
深拷贝和浅拷贝(下图很明确)
浅拷贝
深拷贝(对象和资源一起拷贝)
#include <iostream>
#include <string.h>
using namespace std;
class person
{
public:
Person(char* pN)
{
cout <<"Constructing"<<pN <<endl;
pName=new char[strlen(pN)+1];
if(pName!=0)
{
strcpy(pName,pN);
}
}
//...
protected:
char* pName;
};
Person::Person(Person& p)
{
pName=new char[strlen(p.pName)+1];
if(pName!=0)
{
strcpy(pName,p.pName);
}
}
//拷贝资源的内容,因此是深拷贝;