Rumah > pembangunan bahagian belakang > C++ > Mengapa `shared_from_this` Tidak Boleh Digunakan dalam Pembina?

Mengapa `shared_from_this` Tidak Boleh Digunakan dalam Pembina?

Mary-Kate Olsen
Lepaskan: 2024-11-08 12:32:02
asal
274 orang telah melayarinya

Why Can't `shared_from_this` Be Used in a Constructor?

shared_from_this Constructor Limitation: Penjelasan Teknikal

Tidak seperti salah tanggapan biasa, ketidakupayaan shared_from_this untuk digunakan dalam pembina berpunca daripada batasan teknikal. Untuk memahami sebabnya, kami menyelidiki dalaman pelaksanaannya.

shared_from_this bergantung pada ahli persendirian dalam kelas asas, enable_shared_from_this, untuk menyimpan weak_ptr. Walau bagaimanapun, weak_ptr ini tidak dimulakan sehingga akhir proses pembinaan. Ini bermakna apabila pembina untuk kelas terbitan (cth., Orang) sedang melaksanakan, masih belum ada shared_ptr yang menunjuk ke objek.

Untuk menggambarkan ini, pertimbangkan coretan kod daripada buku:

class Person : public std::enable_shared_from_this<Person> {
   ...
};
Salin selepas log masuk

Fungsi shared_from_this dalam kelas Person akan cuba memulakan weak_ptr tersembunyi menggunakan yang pertama shared_ptr yang menunjuk kepada objek jenis Person. Walau bagaimanapun, memandangkan pembina untuk Orang sedang dijalankan, tiada shared_ptr seperti itu wujud.

Sekatan teknikal ini timbul kerana pembina untuk shared_ptr mesti dipanggil sebelum sebarang tindakan diambil pada objek yang ditunjuk. Oleh itu, mekanisme shared_from_this tidak boleh beroperasi dalam pembina kelas terbitan, kerana tiada shared_ptr tersedia pada peringkat itu.

Atas ialah kandungan terperinci Mengapa `shared_from_this` Tidak Boleh Digunakan 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