Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh `menolak_kembali` Penunjuk Unik ke dalam Vektor, dan Bagaimana Saya Membetulkannya?

Mengapa Saya Tidak Boleh `menolak_kembali` Penunjuk Unik ke dalam Vektor, dan Bagaimana Saya Membetulkannya?

Susan Sarandon
Lepaskan: 2024-12-22 14:12:10
asal
180 orang telah melayarinya

Why Can't I `push_back` Unique Pointers into a Vector, and How Do I Fix It?

Vektor Penunjuk Unik: Mengapa push_back Ditolak dan Cara Mengatasinya

Dalam C , kita menghadapi halangan apabila cuba menyimpan unik penunjuk dalam vektor. Bekas vektor mengharapkan elemen yang membenarkan penyalinan, manakala penunjuk unik mematuhi prinsip pemilikan unik.

Pertimbangkan coretan berikut:

std::vector<std::unique_ptr<int>> vec;

int x(1);
std::unique_ptr<int> ptr2x(&x);
vec.push_back(ptr2x); // Compiler error: attempt to copy unique pointer
Salin selepas log masuk

Ralat berpunca daripada reka bentuk unique_ptr untuk memastikan eksklusif pemilikan. Menyalin unique_ptr akan melanggar sifat asas ini, menjejaskan tujuan terasnya.

Bergerak untuk Menyelesaikan Dilema

Untuk menyelesaikan isu ini, kita mesti menggunakan operasi "gerakan" bukannya meniru. Operasi pemindahan memindahkan pemilikan dari satu bekas ke bekas yang lain, memastikan tiada pertindihan.

vec.push_back(std::move(ptr2x));
Salin selepas log masuk

Dengan pengubahsuaian ini, kod tersebut berjaya memasukkan unique_ptr ke dalam vektor, mengekalkan pemilikan eksklusifnya.

Nota Awas

Adalah penting untuk ambil perhatian bahawa menggunakan_ptr unik untuk menguruskan penunjuk kepada pembolehubah tempatan seperti 'x' tidak disyorkan. Pembolehubah setempat dikendalikan secara automatik semasa keluar blok (cth., fungsi kembali dalam kes ini). Sebaliknya, anda harus memperuntukkan objek secara dinamik.

std::unique_ptr<int> ptr(new int(1));
Salin selepas log masuk

Dalam C 14, kita boleh memudahkan lagi perkara ini menggunakan make_unique:

std::make_unique<int>(5);
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh `menolak_kembali` Penunjuk Unik ke dalam Vektor, dan Bagaimana Saya Membetulkannya?. 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