Rumah >pembangunan bahagian belakang >C++ >Salinan Dalam lwn. Salinan Cetek: Bilakah Saya Memerlukan Salinan Sebenar Data Saya?
Deep Copy vs. Shallow Copy
Soalan:
Apakah perbezaan utama antara salinan dalam dan salinan cetek?
Jawapan:
Salinan Cetek:
Contoh:
<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>
Dalam salinan cetek ini, pi merujuk objek int yang sama dalam kedua-dua objek asal dan salinan.
Salinan Dalam:
Contoh:
<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>
Dalam salinan dalam ini, pi menunjuk ke objek int baharu dengan nilai yang sama seperti yang asal.
Jenis Pembina Salin:
Pembina salinan lalai bergantung pada gelagat setiap pembina salinan ahli:
Contoh:
Dalam contoh berikut, pembina salinan lalai mencipta salinan dalam untuk ahli std::vector kerana pelaksanaannya:
<code class="c++">class Y { private: std::vector<int> v; public: Y() {} Y(const Y& copy) : v(copy.v) {} };</code>
Dalam kes ini, pembina salinan std::vector mencipta salinan mendalam baginya kandungan.
Atas ialah kandungan terperinci Salinan Dalam lwn. Salinan Cetek: Bilakah Saya Memerlukan Salinan Sebenar Data Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!