Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah jenis penunjuk pintar C++ dan perbezaannya?

Apakah jenis penunjuk pintar C++ dan perbezaannya?

WBOY
WBOYasal
2024-05-31 22:41:01494semak imbas

C++ menyediakan berbilang jenis penunjuk pintar untuk mengelakkan ralat memori: unique_ptr: mempunyai pemilikan tunggal sumber asas dan secara automatik mengeluarkan sumber apabila ia keluar dari skop. shared_ptr: telah berkongsi pemilikan sumber asas dan mengeluarkan sumber apabila shared_ptr terakhir dimusnahkan. weak_ptr: Mempunyai pemilikan lemah terhadap sumber asas dan tidak menghalang sumber daripada dikeluarkan, tetapi boleh menyemak dengan selamat sama ada sumber itu wujud. Memilih jenis penunjuk pintar bergantung pada keperluan pemilikan: unique_ptr untuk pemilikan unik, shared_ptr untuk pemilikan dikongsi dan weak_ptr untuk mengendalikan penunjuk berjuntai.

C++ 智能指针的种类及其区别是什么?

Jenis penunjuk pintar dan perbezaannya dalam C++

Dalam C++, penunjuk pintar ialah objek ringan yang merangkum penunjuk mentah dan melepaskannya secara automatik apabila penunjuk asal keluar dari skop. Penunjuk pintar membantu mengelakkan ralat seperti kebocoran memori dan penunjuk berjuntai.

Pustaka standard C++ menyediakan beberapa jenis penunjuk pintar, setiap satu dengan tujuan dan semantik uniknya sendiri. Berikut ialah jenis utama penunjuk pintar:

  • auto_ptr: Penunjuk pintar yang secara automatik melepaskan sumber yang ditunjukkannya apabila ia keluar dari skop. auto_ptr telah ditamatkan dalam C++11 kerana semantik pemindahan pemilikannya.
  • unique_ptr: Penunjuk pintar yang mewakili pemilikan unik sumber asas. Sebaik sahaja unique_ptr dibuat, anda tidak boleh mencipta unique_ptr lain yang menunjuk kepada sumber yang sama. Ini ialah jenis penunjuk pintar yang paling asas.
  • shared_ptr: Petunjuk pintar yang mewakili pemilikan bersama sumber asas. Berbilang shared_ptr boleh dibuat untuk menunjuk ke sumber yang sama Apabila shared_ptr terakhir dimusnahkan, sumber asas dikeluarkan.
  • weak_ptr: Penunjuk pintar yang mewakili pemilikan lemah terhadap sumber asas. weak_ptr tidak menghalang sumber asas daripada dikeluarkan, tetapi adalah selamat untuk menyemak sama ada sumber asas masih wujud.

Contoh Praktikal

Pertimbangkan coretan kod berikut:

// unique_ptr 示例
{
    unique_ptr<string> str = make_unique<string>("Hello");
    cout << *str << endl; // 输出: Hello
} // str 超出作用域并释放 "Hello"

Dalam contoh ini, unique_ptr 确保在 str melepaskan rentetan "Hello" apabila ia keluar dari skop.

Perbezaan

Berikut ialah ringkasan perbezaan utama antara pelbagai jenis penunjuk pintar:

_ptr PemilikanSahaja tidak disokong percuma tiada penunjuk mentah (rujukan tiada penunjuk percuma) tidak menghalang mentah penunjuk daripada dilepaskan KeselamatanPaling selamatLebih selamatKurang selamatMemilih titik pintar yang tepat bergantung pada jenis penunjuk pintar yang betul . Untuk senario pemilikan unik, unique_ptr diutamakan. Untuk pemilikan bersama, shared_ptr ialah pilihan terbaik. weak_ptr berguna untuk mengendalikan penunjuk berjuntai dan melaksanakan rujukan bulat.
Ciri unique_ptrweshare
Dikongsi Lemah pemindahan
disokong tidak disokong skop

Atas ialah kandungan terperinci Apakah jenis penunjuk pintar C++ dan perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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