Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah `dayakan_kongsi_daripada_ini` Menyelesaikan Masalah Mencipta `shared_ptr`s to `this` yang Selamat?

Bagaimanakah `dayakan_kongsi_daripada_ini` Menyelesaikan Masalah Mencipta `shared_ptr`s to `this` yang Selamat?

Barbara Streisand
Lepaskan: 2024-12-12 20:36:14
asal
233 orang telah melayarinya

How Does `enable_shared_from_this` Solve the Problem of Creating Safe `shared_ptr`s to `this`?

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

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

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!

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