Rumah > pembangunan bahagian belakang > C++ > Bolehkah Fungsi Biasa Memudahkan Pembina Salin dan Operator Tugasan Lebihan?

Bolehkah Fungsi Biasa Memudahkan Pembina Salin dan Operator Tugasan Lebihan?

Mary-Kate Olsen
Lepaskan: 2024-11-27 03:15:12
asal
421 orang telah melayarinya

Can a Common Function Simplify Copy Constructor and Assignment Operator Overloads?

Mencipta Fungsi Bersama untuk Pembina Salin dan Operator Tugasan

Pembina salinan dan operator tugasan yang berlebihan sering berkongsi kod yang serupa dan hanya berbeza dalam jenis pulangan mereka. Bolehkah kita memudahkan perkara ini dengan mencipta fungsi biasa yang boleh digunakan oleh kedua-duanya?

Pilihan 1: Operator Memanggil Secara Eksplisit= daripada Copy Constructor

MyClass(const MyClass& other) {
    operator=(other);
}
Salin selepas log masuk

Pendekatan ini secara amnya tidak digalakkan kerana ia memperkenalkan masalah dengan pengurusan negeri lama dan penugasan diri. Selain itu, ia menginisialisasikan semua ahli secara lalai, walaupun mereka diperuntukkan daripada objek lain.

Pilihan 2: Melaksanakan Operator= Menggunakan Copy Constructor dan Swap

Sebuah pilihan penyelesaian melibatkan pelaksanaan operator= menggunakan pembina salinan dan kaedah swap:

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

Atau malah:

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

Fungsi swap menukar pemilikan data dalaman tanpa membersihkan keadaan sedia ada atau memperuntukkan sumber baharu. Pendekatan ini adalah selamat untuk penugasan kendiri dan sangat selamat dikecualikan, dengan syarat bahawa operasi swap adalah tanpa balingan.

Awas:

Pastikan kaedah swap berfungsi dengan benar swap, bukan std::swap lalai, yang bergantung pada pembina salinan dan pengendali tugasan itu sendiri. Gunakan pertukaran ahli untuk jenis primitif dan jenis penunjuk untuk menjamin kelakuan tidak membuang.

Atas ialah kandungan terperinci Bolehkah Fungsi Biasa Memudahkan Pembina Salin dan Operator Tugasan Lebihan?. 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