Deep Copy vs. Shallow Copy: Pandangan Lebih Dekat
Dalam pengaturcaraan berorientasikan objek, memahami perbezaan antara salinan dalam dan cetek adalah penting . Mari kita mendalami konsep untuk menjelaskan perbezaannya.
Salinan Cetek
Salinan cetek mencipta objek baharu yang merujuk objek yang sama dengan objek asal. Ini bermakna jika salah satu objek berubah, ia memberi kesan kepada kedua-dua objek asal dan objek yang disalin.
Pertimbangkan contoh berikut:
<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>
Dalam senario ini, ahli pi menunjuk kepada yang sama integer dalam kedua-dua objek X asal dan salinan.
Salinan Dalam
Sebaliknya, salinan dalam mencipta objek baharu dan mengklon semua ahli objek asal. Tiada objek kongsi antara objek asal dan objek yang disalin.
Berikut ialah contoh yang diubah suai:
<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>
Dalam kes ini, ahli pi bagi objek X asal dan yang disalin menghala ke integer berbeza objek, tetapi kedua-duanya mengandungi nilai yang sama.
Pembina Salin
Apabila mencipta salinan objek, pembina salinan digunakan. Pembina salinan lalai (jika tidak ditakrifkan secara eksplisit oleh pengaturcara) biasanya melakukan salinan cetek, kecuali ahli yang mempunyai pembina salinan tersuai mereka sendiri.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tingkah laku pembina salinan boleh berbeza-beza bergantung pada ahli data khusus yang terkandung di dalamnya. Sesetengah ahli boleh melakukan salinan dalam, salinan cetek atau gabungannya.
Atas ialah kandungan terperinci Salinan Dalam lwn. Salinan Cetek: Bilakah Saya Perlu Mengklon Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!