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
Mary-Kate Olsenasal
2024-11-08 12:32:02193semak imbas

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

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:
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