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?

DDD
Lepaskan: 2024-11-06 06:14:02
asal
788 orang telah melayarinya

Why Can't You Use `shared_from_this` in a Constructor?

Memahami Ketidakupayaan Shared_from_this dalam Pembina

Pertanyaan memfokuskan pada had penggunaan shared_from_this dalam pembina kelas. Untuk menangani perkara ini, mari kita terokai sebab teknikal di sebalik sekatan ini.

Ahli Tersembunyi Shared_ptr

Shared_from_ini adalah rujukan sendiri, bergantung pada ahli lemah_ptr dalaman yang ditambahkan pada dayakan_kongsi_dari_kelas asas ini. Walau bagaimanapun, weak_ptr ini hanya ditetapkan selepas shared_ptr pertama kepada Orang dibuat.

Garis Masa Pembinaan

Pembina kelas bertanggungjawab untuk memulakan ahlinya, termasuk membina enable_shared_from_this contoh kelas asas. Semasa pembinaan objek awal, belum ada shared_ptr yang menunjuk kepada Orang tersebut.

Hubungan antara Shared_ptr dan Weak_ptr

Pertimbangkan coretan berikut:

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

Sebelum pembina p (ptr_kongsi) dipanggil, ungkapan new Person() mesti dinilai, yang membawa kepada pembinaan objek Person. Memandangkan pembina shared_ptr berjalan selepas objek Person dicipta, objek shared_ptr tidak wujud semasa fasa pembina Person, menjadikan penggunaan shared_from_this mustahil.

Kesimpulan

Secara teknikal , shared_from_this tidak boleh digunakan dalam pembina kerana shared_ptr yang diperlukan, yang memulakan weak_ptr dalaman, tidak wujud sehingga objek dibina sepenuhnya. Ini menghalang shared_from_this daripada mewujudkan sambungan rujukan kendiri yang diperlukan.

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan