Rumah > pembangunan bahagian belakang > C++ > Mengapa Anda Tidak Boleh Menggunakan `shared_from_this()` dalam Pembina?

Mengapa Anda Tidak Boleh Menggunakan `shared_from_this()` dalam Pembina?

Mary-Kate Olsen
Lepaskan: 2024-11-06 15:35:02
asal
623 orang telah melayarinya

Why Can't You Use `shared_from_this()` in Constructors?

Memahami Had shared_from_this dalam Pembina

Seperti yang dinyatakan dalam petikan daripada "The C Standard Library," shared_from_this() menghadapi masalah teknikal had dalam pembina. Untuk memahami konsep ini, adalah penting untuk menyelidiki kerja dalaman shared_from_this().

Peranan Penunjuk Lemah dalam shared_from_this

shared_from_this() bergantung pada dalaman weak_ptr untuk mengekalkan rujukan yang lemah kepada objek yang dicipta. Penunjuk lemah ini kekal tidak dimulakan sehingga shared_ptr yang kukuh (shared_ptr yang memiliki objek) dicipta untuk objek. Hanya selepas shared_ptr pertama dibuat instantiated boleh enable_shared_from_this, kelas asas objek, mengakses shared_ptr ini dan memulakan weak_ptr.

Isu Masa Pembinaan

Kebergantungan ini pada shared_ptrs sedia ada menimbulkan masalah untuk pembina. Apabila pembina sedang dipanggil, tiada shared_ptr yang menunjuk ke objek yang sedang dibina wujud lagi. Oleh itu, semasa pembinaan, enable_shared_from_this tidak boleh memulakan weak_ptrnya, menyebabkan shared_from_this() tidak boleh digunakan dalam pembina.

Contoh untuk Penjelasan

Pertimbangkan coretan kod berikut:

class Person : public std::enable_shared_from_this<Person> {
   ...
};

std::shared_ptr<Person> p(new Person());
Salin selepas log masuk

Dalam contoh ini, pembina Person() berjalan sebelum pembina p shared_ptr. Ini bermakna semasa pembina Person(), tiada shared_ptr yang menunjuk ke objek Person wujud, melarang enable_shared_from_this daripada memulakan weak_ptrnya dan menyebabkan shared_from_this() tidak boleh diakses dalam pembina.

Atas ialah kandungan terperinci Mengapa Anda Tidak Boleh Menggunakan `shared_from_this()` dalam Pembina?. 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