Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah `dayakan_kongsi_daripada_ini` Menyelesaikan Isu Pemilikan Penunjuk Dikongsi dalam C ?

Bagaimanakah `dayakan_kongsi_daripada_ini` Menyelesaikan Isu Pemilikan Penunjuk Dikongsi dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-15 04:52:34688semak imbas

How Does `enable_shared_from_this` Solve Shared Pointer Ownership Issues in C  ?

Bagaimanakah enable_shared_from_this Membantu dalam Mengekalkan Pemilikan Objek?

Semasa meneroka contoh Boost.Asio, anda mungkin pernah menemui enable_shared_from_this. Walaupun merujuk kepada dokumentasi, penggunaannya masih tidak jelas. Berikut ialah penjelasan komprehensif dan contoh untuk menjelaskan tujuannya.

enable_shared_from_this membolehkan anda mencipta contoh shared_ptr yang sah untuk objek apabila anda hanya mempunyai akses kepada objek itu sendiri (diwakili oleh ini). Tanpanya, mendapatkan shared_ptr untuk ini adalah mustahil melainkan ia telah ditakrifkan sebagai ahli.

Pertimbangkan contoh berikut:

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_from_this();
    }
};

Di sini, kaedah f() boleh mengembalikan yang sah shared_ptr, walaupun ia tidak mempunyai contoh ahli. Ambil perhatian bahawa pendekatan berikut akan gagal:

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_ptr<Y>(this);
    }
};

Hasilnya ialah dua shared_ptrs dengan kiraan rujukan yang berbeza. Apabila objek dipadamkan, salah satu daripadanya akan menjadi rujukan yang tergantung.

Adalah penting untuk ambil perhatian bahawa enable_shared_from_this kini merupakan sebahagian daripada standard C 11, menjadikannya boleh diakses dari sana dan juga dari Boost.

Atas ialah kandungan terperinci Bagaimanakah `dayakan_kongsi_daripada_ini` Menyelesaikan Isu Pemilikan Penunjuk Dikongsi dalam C ?. 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