深拷貝與淺拷貝
問題:
兩者之間的主要區別是什麼深拷貝和淺拷貝?
答案:
淺拷貝:
範例:
<code class="c++">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(copy.pi) {} };</code>
在此淺複製中, pi 在原始物件和複製物件中引用相同的 int 物件。
深度複製:
範例:
<code class="c++">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {} };</code>
在此深度複製中,pi 指向一個新的 int 對象,其值與原始對象相同。
複製建構子類型:
預設的複製建構子取決於每個成員的複製建構子的行為:
範例:
In在下面的範例中,預設的複製建構函式由於其實作而為std::vector 成員建立了一個深層副本:
<code class="c++">class Y { private: std::vector<int> v; public: Y() {} Y(const Y& copy) : v(copy.v) {} };</code>
在這種情況下,std::vector 的複製建構函式為其建立了一個深層副本內容。
以上是深複製與淺複製:何時需要資料的真實副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!