Apakah enable_shared_from_this dan Mengapa ia Berguna?
Pengenalan
Semasa meneroka Boost. Contoh Asio, anda mungkin menghadapi enable_shared_from_this, meninggalkan anda bingung tentang penggunaannya yang betul. Artikel ini bertujuan untuk memberikan penjelasan yang komprehensif dan contoh apabila menggunakan kelas ini masuk akal.
Memahami enable_shared_from_this
enable_shared_from_this ialah kelas utiliti yang memudahkan penukaran kelas biasa penunjuk (seperti ini) ke dalam contoh shared_ptr yang sah. Tanpanya, mengakses shared_ptr kepada objek semasa adalah mustahil melainkan ia disimpan secara eksplisit sebagai pembolehubah ahli.
Contoh dan Penjelasan
Pertimbangkan contoh berikut:
class Y : public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_from_this(); } }; 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, kaedah f() mengembalikan shared_ptr yang sah, walaupun ia melakukannya tidak mempunyai contoh ahli shared_ptr. Kelas enable_shared_from_this membenarkan penukaran ini. Adalah penting untuk ambil perhatian bahawa pendekatan berikut adalah salah:
class Y : public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_ptr<Y>(this); } };
Ini akan menghasilkan petunjuk dikongsi dengan kiraan rujukan yang berbeza, yang membawa kepada rujukan yang berpotensi berjuntai apabila objek dipadamkan.
Kesimpulan
dayakan_kongsi_dari_ini ialah alat yang berharga untuk mencipta contoh shared_ptr bagi objek semasa, apabila anda hanya mempunyai akses kepada penuding biasa. Ia menghalang rujukan berjuntai dan memastikan pengurusan sumber yang betul. Fungsi ini kini juga tersedia sebagai sebahagian daripada standard C 11.
Atas ialah kandungan terperinci Apakah itu `dayakan_kongsi_daripada_ini` dan bagaimanakah ia mencipta kejadian `shared_ptr` dengan selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!