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

Mary-Kate Olsen
Lepaskan: 2024-11-06 15:35:02
asal
458 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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!