Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah `dayakan_kongsi_daripada_ini` Menyelesaikan Masalah Mencipta `shared_ptr`s to `this` yang Selamat?
Memahami Peranan enable_shared_from_this
Konsep enable_shared_from_ini selalunya membuatkan pengaturcara bingung dan dokumentasi boleh menjadi sama mengelirukan. Artikel ini bertujuan untuk menerangkan tujuan dan penggunaan kelas ini yang betul dengan bantuan contoh konkrit.
Apakah yang enable_shared_from_this Do?
enable_shared_from_this membolehkan anda membuat contoh shared_ptr yang menunjuk ke objek semasa ("ini") apabila anda hanya mempunyai penunjuk mentah. Fungsi ini penting untuk senario tertentu di mana anda perlu mengekalkan pemilikan bersama objek.
Contoh Ilustrasi:
Pertimbangkan kelas Y berikut yang berasal daripada enable_shared_from_this< ;Y>:
class Y : public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_from_this(); } };
Dalam kaedah f, kami boleh mengembalikan shared_ptr yang sah walaupun kelas tidak mempunyai sebarang contoh ahli. Mari kita terokai ini dengan lebih lanjut:
int main() { shared_ptr<Y> p(new Y); shared_ptr<Y> q = p->f(); assert(p == q); assert(!(p < q || q < p)); // p and q must share ownership }
Dalam contoh ini, p ialah shared_ptr asal yang menunjuk ke objek. Apabila kami memanggil p->f(), kami memperoleh shared_ptr (q) lain yang berkongsi pemilikan dengan p. Penegasan p == q mengesahkan bahawa ia merujuk kepada objek yang sama, dan penegasan kedua menjamin bahawa ia tidak mempunyai nilai yang berbeza (p dan q mesti sentiasa mengekalkan kiraan rujukan yang sama).
Kepentingan Penggunaan Betul:
Adalah penting untuk menekankan bahawa hanya mencipta shared_ptr menggunakan ini (tanpa enable_shared_from_this) akan menghasilkan kiraan rujukan yang salah. Oleh itu, menggunakan enable_shared_from_this memastikan pengurusan pemilikan dikongsi yang betul.
Ketersediaan:
enable_shared_from_this tersedia dalam kedua-dua Boost dan standard C 11. Anda boleh menggunakan salah satu daripada pelaksanaan ini berdasarkan keperluan anda.
Atas ialah kandungan terperinci Bagaimanakah `dayakan_kongsi_daripada_ini` Menyelesaikan Masalah Mencipta `shared_ptr`s to `this` yang Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!