Menyalin Penunjuk Unik dalam Kelas
Menyalin kelas yang mengandungi penunjuk unik sebagai ahli memerlukan pertimbangan khusus. Penunjuk unik tidak boleh dikongsi, yang memerlukan sama ada salinan mendalam kandungannya atau penukaran kepada penuding dikongsi.
Penyalinan Dalam
Pendekatan salinan mendalam mencipta penuding unik baharu dan memulakannya dengan salinan kandungan penuding asal:
class A { std::unique_ptr<int> up_; public: A(int i) : up_(new int(i)) {} A(const A& a) : up_(new int(*a.up_)) {} };
Di sini, A's copy constructor deep menyalin int yang ditunjuk oleh penuding unik asal.
Penukaran kepada Penunjuk Dikongsi
Sebagai alternatif, anda boleh menukar penuding unik kepada penuding dikongsi, yang membolehkannya dikongsi antara berbilang objek:
class B { std::unique_ptr<int> up_; public: B(int i) : up_(new int(i)) {} B(const B& b) { up_ = std::make_shared(*b.up_); } };
Dalam contoh ini, salinan B pembina menukar penuding unik kepada penuding dikongsi, membolehkan berbilang salinan B untuk mengakses data asas yang sama.
Operator Lain
Untuk berfungsi dengan lancar dengan bekas, seperti std ::vektor, pengendali tambahan biasanya diperlukan:
Move Constructor:
B(B&& b) { up_ = std::move(b.up_); }
Salin Tugasan:
B& operator=(const B& b) { up_ = std::make_shared(*b.up_); return *this; }
Bergerak Tugasan:
B& operator=(B&& b) { up_ = std::move(b.up_); return *this; }
Pengendali ini memastikan objek boleh ditugaskan dan disalin dengan selamat dalam pelbagai konteks.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Penunjuk Unik Semasa Menyalin Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!