Salinan Dalam dan Cetek dalam C
Dalam C , terdapat dua jenis penyalinan objek: salinan dalam dan salinan cetek. Memahami perbezaannya adalah penting untuk pengurusan ingatan yang berkesan dan memelihara integriti data.
Salinan Cetek
Salinan cetek mencipta objek baharu yang menunjukkan nilai yang sama seperti yang asal objek. Ia menduplikasi nilai yang disimpan dalam objek tetapi tidak mencipta salinan baharu sebarang objek yang dirujuk. Contohnya, jika objek mengandungi penuding ke kawasan memori yang diperuntukkan, salinan cetek akan menghala ke kawasan memori yang sama dengan objek asal.
Salinan Dalam
Sebaliknya, salinan dalam mencipta objek baharu yang bukan sahaja mengandungi nilai pendua tetapi juga mencipta salinan baharu mana-mana objek yang dirujuk. Ini memastikan bahawa objek baharu adalah bebas sepenuhnya daripada objek asal. Jika objek mengandungi penuding ke kawasan memori yang diperuntukkan, salinan dalam akan mencipta kawasan memori baharu dan menyalin data ke dalamnya.
Pembina Salinan Lalai
Oleh lalai, C mencipta pembina salinan cetek. Ia menyalin nilai semua ahli data daripada objek asal kepada objek baharu, termasuk penunjuk. Ini bermakna bahawa sebarang pengubahsuaian yang dibuat kepada salinan dalam juga akan ditunjukkan dalam objek asal.
Pembina Salin Tersuai
Adalah mungkin untuk menentukan pembina salinan tersuai yang melaksanakan salinan yang mendalam. Ini dicapai dengan menyalin data secara manual ke kawasan memori baharu untuk setiap ahli rujukan. Sebagai contoh, kod di bawah menunjukkan pembina salinan tersuai yang melakukan salinan dalam untuk kelas X, yang mempunyai pi ahli penuding:
<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 contoh ini, pembina salinan cetek hanya akan menyalin pi penunjuk untuk menunjuk ke lokasi memori yang sama dengan objek asal. Walau bagaimanapun, pembina salinan dalam mencipta objek int baharu, memperuntukkan memori untuknya dan menyalin nilai daripada penuding pi objek asal.
Kesimpulan
Salinan dalam dan salinan cetek adalah konsep penting untuk mengurus ingatan dan memelihara integriti data. Salinan cetek adalah cekap apabila berurusan dengan data tidak berubah, manakala salinan dalam diperlukan apabila bekerja dengan data yang boleh diubah suai. Pembina salinan lalai membuat salinan cetek, tetapi penting untuk mengetahui kemungkinan kebocoran memori atau kerosakan data yang mungkin timbul akibat rujukan penunjuk.
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berasaskan soalan yang menangkap intipati artikel: * Deep vs. Shallow Copy dalam C : Bilakah Saya Perlukan Deep Copy? * C Salin Pembina dan Pengurusan Memori: Cetek lwn Dee. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!