深拷貝與淺拷貝:仔細看看
在物件導向程式設計中,理解深拷貝和淺拷貝的區別至關重要。讓我們深入研究概念以澄清差異。
淺複製
淺複製建立一個新對象,該新物件引用與原始物件相同的物件。這意味著如果其中一個物件發生更改,它會影響原始物件和複製的物件。
考慮以下範例:
<code class="cpp">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(copy.pi) {} };</code>
在此場景中,pi 成員指向相同的物件原始 X 物件和複製的 X 物件中的整數。
深層複製
相反,深層複製建立一個新物件並克隆原始物件的所有成員。原始物件和複製物件之間沒有共用物件。
這是一個修改後的範例:
<code class="cpp">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>
在這種情況下,原始X 物件和複製的X 物件的pi 成員指向不同的整數對象,但它們都包含相同的值。
複製建構子
建立物件的副本時,使用複製建構子。預設的複製建構函式(如果程式設計師沒有明確定義)通常會執行淺複製,但具有自己的自訂複製建構函式的成員除外。
但是,需要注意的是,複製建構子的行為可以取決於它所包含的特定資料成員。有些成員可能會執行深拷貝、淺拷貝或其組合。
以上是深複製與淺複製:何時需要克隆資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!