淺複製
JAVA
在JAVA中,淺複製是指當對象的欄位值被複製時,欄位引用的對象不會被複製.例如,如果一個對象有一個指向字元串的欄位,並且我們對該對象做了一個淺複製,那麽兩個對象將引用同一個字元串.和淺複製對應的有深複製.
C++
在C++中,在用一個對象初始化另一個對象時,只複製了成員,並沒有複製資源,使兩個對象同時指向了同一資源的複製方式稱為淺複製。如果不存在資源矛盾,那么程式能夠正常運行。請看下面一段程式:
#include<iostream.h>
using namespace std;
class Student
{
public:
Student(int pid,char *pname,float s);
Student(const Student&s1);
void display();
~Student();
private:
int id;
char*name;
float score;
};
Student::Student(int pid,char*pname,float s)
{
id=pid;
name=new char[strlen(pname)+1];
strcpy(name,pname);
score=s;
}
Student::Student(const Student&s1)
{
id=s1.id;
name=new char[strlen(s1.name)+1];
strcpy(name,s1.name);
score=s1.score;
}
void Student::display()
{}
總結起來,源程式中沒有顯示定義複製構造函式,在進行對象的複製時,將調用系統默認的複製構造函式,這就使得兩個對象指向了同一資源,而析構函式又在對象生命周期結束後可以釋放資源,勢必會兩次返還資源,編譯器就會報錯。而所謂的深複製,即當一個對象創建時,分配了資源,這時必須顯示定義複製構造函式,這種在用一個對象初始化另一個對象時,不僅複製了成員,也複製了資源的複製方式稱為深複製。