Menulis Fungsi Biasa untuk Pembina Salin dan Operator Tugasan Salin
Dalam pengaturcaraan, kedua-dua pembina salinan dan pengendali tugasan salinan sering berkongsi sebahagian besar daripada pelaksanaannya. Persamaan ini menimbulkan persoalan: bolehkah kita menggabungkan fungsi mereka menjadi satu fungsi sepunya?
Pendekatan Fungsi Sepunya
Ya, adalah mungkin untuk mencipta fungsi sepunya yang mengendalikan kedua-dua pembina salinan dan pengendali tugasan salinan. Begini caranya:
Pilihan 1: Operator Eksplisit= Doa daripada Copy Constructor (Tidak Digalakkan)
MyClass(const MyClass& other) { operator=(other); }
Walau bagaimanapun, pendekatan ini tidak disyorkan kerana:
Pilihan 2: Salin-dan-Tukar Idiom
MyClass& operator=(const MyClass& other) { MyClass tmp(other); swap(tmp); return *this; }
Idiom salin dan tukar menawarkan beberapa kelebihan:
Pertimbangan Fungsi Tukar
Adalah penting untuk menggunakan fungsi swap "benar" yang menukar secara langsung dalaman tanpa bergantung pada pembina salinan atau tugasan salinan pengendali. Tukar ahli atau menggunakan std::swap dengan jenis asas dan penunjuk biasanya sesuai.
Atas ialah kandungan terperinci Bolehkah Fungsi Biasa Menggantikan Kedua-dua Pembina Salin dan Operator Tugasan Salin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!