Rumah > pembangunan bahagian belakang > C++ > Apakah itu `dayakan_kongsi_daripada_ini` dan bagaimanakah ia mencipta kejadian `shared_ptr` dengan selamat?

Apakah itu `dayakan_kongsi_daripada_ini` dan bagaimanakah ia mencipta kejadian `shared_ptr` dengan selamat?

Linda Hamilton
Lepaskan: 2024-12-17 04:36:25
asal
455 orang telah melayarinya

What is `enable_shared_from_this` and how does it safely create `shared_ptr` instances?

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
}
Salin selepas log masuk

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);
    }
};
Salin selepas log masuk

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!

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