Rumah > pembangunan bahagian belakang > C++ > Bolehkah Fungsi Biasa Menggantikan Kedua-dua Pembina Salin dan Operator Tugasan Salin?

Bolehkah Fungsi Biasa Menggantikan Kedua-dua Pembina Salin dan Operator Tugasan Salin?

Susan Sarandon
Lepaskan: 2024-12-05 09:23:11
asal
904 orang telah melayarinya

Can a Common Function Replace Both the Copy Constructor and Copy Assignment Operator?

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);
}
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini tidak disyorkan kerana:

  • Ia menimbulkan isu dengan pemulaan objek dan penugasan diri.
  • Ia memperkenalkan langkah permulaan ahli yang tidak perlu, walaupun penugasan semula bertujuan.

Pilihan 2: Salin-dan-Tukar Idiom

MyClass& operator=(const MyClass& other)
{
    MyClass tmp(other);
    swap(tmp);
    return *this;
}
Salin selepas log masuk

Idiom salin dan tukar menawarkan beberapa kelebihan:

  • Keselamatan tugasan kendiri.
  • Keselamatan pengecualian yang kukuh, memastikan keadaan lama dikekalkan jika pengecualian berlaku semasa tugasan.
  • Kerumitan kod dikurangkan, kerana peruntukan sumber dan pembersihan dikendalikan oleh swap fungsi.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan