Apabila mengisytiharkan kelas dalam C , pengkompil boleh secara automatik menyediakan pembina salinan lalai jika pelaksanaan eksplisit tidak disediakan. Walau bagaimanapun, tingkah laku pembina ini menjadi lebih kompleks apabila berurusan dengan kelas yang mengandungi objek yang tidak mempunyai pembina salinan yang diisytiharkan.
Pertimbangkan kod berikut:
class Foo { Bar bar; }; class Bar { int i; Baz baz; }; class Baz { int j; }; Foo f1; Foo f2(f1);
Persoalannya timbul: apakah adakah pembina salinan lalai akan lakukan dalam senario ini?
Pembina salinan yang dijana pengkompil untuk Foo akan berkelakuan seperti berikut:
Oleh itu, dalam contoh yang disediakan, apabila membina f2 menggunakan f1 , pengkompil akan:
Memandangkan Baz tidak mempunyai pembina salinan yang diisytiharkan, pengkompil akan menjana pembina salinan lalai untuknya. Pembina salinan lalai ini akan melakukan salinan cetek, menyalin nilai j tetapi bukan objek yang ditunjukkannya.
Adalah penting untuk ambil perhatian bahawa tingkah laku salinan cetek ini bermakna bahawa sebarang objek yang ditunjuk oleh pembolehubah ahli Foo tidak akan disalin. Ini boleh mengakibatkan akibat yang tidak diingini jika objek asal diubah suai kemudian, kerana nilai yang diubah suai tidak akan ditunjukkan dalam objek yang disalin.
Untuk kawalan yang lebih mendalam ke atas proses penyalinan, adalah disyorkan untuk mentakrifkan pembina salinan secara eksplisit untuk sebarang kelas yang memerlukan penyalinan terkawal pembolehubah ahlinya.
Atas ialah kandungan terperinci Bagaimanakah Pembina Salinan Lalai Mengendalikan Kelas dengan Objek Tiada Pembina Salinan Diisytiharkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!