C++中複製使用的時機:
1. 使用一個建立完畢的物件來初始化一個新的物件。
People p1;
People p2(p1); //使用了複製,賦值了各個值
2.用值傳遞的方式給函式引數傳值
void visit(People p) {}
int main
{
People p1;
visit(p1); //值傳遞會複製一個object的副本出來,使用了複製
}
3.以值的方式返回區域性物件
People copy()
{
People p1; //按道理p1是區域性變數,出了函式就會被釋放。
return p1; //根據p1建立一個新的物件,並且返回
}
People p = copy();
淺複製,簡單的複製操作
深複製,在堆區的重新開闢記憶體,進行複製操作
C++淺複製會引起的問題。
假設類中用 new 建立了堆區記憶體,並且 object之間進行了賦值操作,會導致在delete——釋放記憶體,時出現重複釋放同一塊記憶體空間的問題。
因此在使用new並且出現物件賦值操作後,應該使用深複製。
例如:
int *m_Age;
深複製: m_Age = new int(*p.m_Age); //p是被複製的物件