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> { ... };
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!