Dalam pengaturcaraan, pembina salinan dan operator tugasan salinan sering digunakan bersama untuk menentukan salinan objek tingkah laku. Kedua-dua operasi berkongsi kod dan parameter yang serupa, hanya berbeza dalam jenis pemulangannya. Ini menimbulkan persoalan: adakah mungkin untuk mencipta fungsi biasa yang mengendalikan kedua-dua senario?
Jawapan:
Ya, terdapat dua pendekatan utama untuk mencapai ini:
1. Memanggil Operator Tugasan secara Eksplisit daripada Pembina Salin:
MyClass(const MyClass& other) { operator=(other); }
Walau bagaimanapun, pendekatan ini mempunyai kelemahan. Ia meletakkan tanggungjawab tambahan kepada pengendali tugasan untuk mengendalikan keadaan lama dan isu penugasan diri, yang boleh mencabar. Selain itu, kaedah ini memerlukan semua ahli dimulakan terlebih dahulu, yang boleh menjadi berlebihan dan berpotensi mahal.
2. Copy and Swap Idiom:
Pendekatan ini melaksanakan operator penugasan salinan menggunakan pembina salinan dan kaedah swap:
MyClass& operator=(const MyClass& other) { MyClass tmp(other); swap(tmp); return *this; }
Kaedah swap bertanggungjawab untuk menukar bahagian dalaman dua objek tanpa membersihkan atau memperuntukkan sumber baharu. Kaedah ini memberikan beberapa kelebihan:
Awas: Adalah penting untuk memastikan bahawa kaedah swap melakukan swap sebenar, bukannya bergantung pada std::swap lalai, yang mungkin menggunakan pembina salinan dan pengendali tugasan itu sendiri.
Atas ialah kandungan terperinci Bolehkah Fungsi Tunggal Menggantikan Kedua-dua Pembina Salin dan Operator Tugasan Salin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!