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
329 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!

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