Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Melaksanakan Pembina Salinan untuk Kelas dengan Ahli `unique_ptr`?

Bagaimana untuk Melaksanakan Pembina Salinan untuk Kelas dengan Ahli `unique_ptr`?

Barbara Streisand
Lepaskan: 2024-12-05 17:47:12
asal
317 orang telah melayarinya

How to Implement a Copy Constructor for Classes with a `unique_ptr` Member?

Melaksanakan Pembina Salinan untuk Kelas dengan Ahli Unique_ptr

Apabila bekerja dengan kelas yang mengandungi pembolehubah ahli unique_ptr, pelaksanaan salinan pembina menjadi penting. Ini boleh dicapai dengan mempertimbangkan dua pendekatan: menyalin kandungan dalam-dalam atau menukar unique_ptr kepada shared_ptr.

Pendekatan Salin Dalam

Untuk menyalin kandungan secara mendalam unique_ptr, anda boleh mencipta unique_ptr baharu dan tetapkan nilai yang asal kepadanya. Ini memastikan bahawa objek baharu mempunyai pemilikan eksklusif datanya sendiri. Berikut ialah contoh:

class A {
   std::unique_ptr<int> up_;

public:
   A(int i) : up_(new int(i)) {}
   A(const A& a) : up_(new int(*a.up_)) {}
};
Salin selepas log masuk

Penukaran kepada Pendekatan Shared_ptr

Sebagai alternatif, anda boleh menukar unique_ptr kepada shared_ptr, membolehkan berbilang objek berkongsi pemilikan data. Setelah pemilikan dikongsi diwujudkan, anda boleh menetapkannya kepada unique_ptr baharu. Pendekatan ini boleh berguna apabila bekerja dengan berbilang objek yang perlu berkongsi data yang sama.

Move Constructor

Daripada melaksanakan pembina salinan, anda boleh mempertimbangkan untuk menggunakan gerakkan pembina. Pembina bergerak secara eksplisit memindahkan ahli dari objek sumber ke objek sasaran. Berikut ialah contoh:

A(A&& a) : up_(std::move(a.up_)) {}
Salin selepas log masuk

Pendekatan ini menganggap bahawa kelas anda boleh dialihkan dan membolehkan pemindahan pemilikan yang cekap antara objek.

Set Operator Lengkap

Lazimnya, kelas dengan ahli_ptr unik juga harus menyertakan tugasan salinan dan memindahkan pengendali tugasan untuk mengendalikan pengurusan data dengan betul. Pengendali ini memastikan peruntukan sumber dan pengendalian pemilikan yang betul apabila menetapkan satu objek kepada yang lain.

Pertimbangan Tambahan untuk Vektor

Jika kelas anda dengan ahli_ptr unik digunakan dalam std ::vector, anda perlu memutuskan sama ada vektor harus mempunyai pemilikan unik atau membenarkan berbilang salinan. Memaksa semantik bergerak sahaja dengan mengelakkan pembina salinan dan operator tugasan salinan membantu pengkompil membimbing penggunaan kelas anda dalam std::vector dengan jenis bergerak sahaja.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pembina Salinan untuk Kelas dengan Ahli `unique_ptr`?. 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