トピック:深いと浅いコピーコピーが何であるかを教えてください?それらを区別し、実装コード。
[回答]
クラスは、リソースを持っている場合は、レプリケーション中に発生したオブジェクトのこのクラスのオブジェクトが発生した場合、プロセスはリソースオブジェクトがある場合には、ディープコピー呼び出すことができますが、リソースをコピーしないコピー処理中に浅いコピーです。
[A]
シャローコピーは次のとおりです。
class Test
{
public:
Test(int temp)
{
p=temp;
}
Test(Test &c_t)//自定义的拷贝构造函数
{
cout<<"进入copy构造函数"<<endl;
p=c_t.p1;//复制过程的核心语句
}
public:
int p1;
};
int main()
{
Test a(99);
Test b=a;
cout<<b.p1;
cin.get();
return 0;
}
ディープコピーは、オブジェクトの動的メンバーのディープコピーだけではなく、単純な割り当てとして知られているのではなく、ダイナミックなスペースを再割り当てします。
ディープコピーのサンプル・コードは次のとおりです。
class Rect
{
public:
Rect()//构造函数,p指向堆中分配空间
{
p=new int(100);
}
Rect(const Rect &r)
{
width=r.width;
height=r.height;
p=new int;//为新对象重新动态分配空间
*p=*(r.p);
}
~Rect()//析构函数,释放动态分配空间
{
if(p!=NULL)
{
delete p;
}
}
private:
int width;
int height;
int *p;
};
-