複製

煙雨無晴發表於2023-03-27

  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是被複製的物件

相關文章