深拷贝构造函数和浅拷贝构造函数
分类:拷贝构造函数分为深拷贝构造函数和浅拷贝构造函数。
区别:浅拷贝,即只复制对象空间,不复制对象资源。
深拷贝,既复制对象空间又复制资源。
由C++语言提供的默认拷贝构造函数只是对对象进行浅拷贝逐个成员依次拷贝。
浅拷贝
深拷贝和浅拷贝只在z指针变量中才有的说法,指针对象要用深拷贝,可是其他变量就不用。
深拷贝
当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象。所以,这时,必须采用深拷贝。
#include <iostream>
using namespace std;
class sb {
public:
sb(char *na) //构造函数
{
cout << "FG ?" << endl;
name = new char[strlen(na) + 1];//new进行分配
if (name != 0)
{
strcpy(name, na);
}
}
sb(sb &p) //深拷贝构造函数
{
cout << "FG win !" << endl;
name = new char[strlen(p.name) + 1];//复制资源
if (name != 0)
strcpy(name, p.name);//复制对象空间
}
void print()
{
cout << name << endl;
}
~sb()
{
delete name;
}
private:
char *name;
};
int main () {
sb niubi("wang");
sb li(niubi);
niubi.print();
li.print();
return 0;
}