Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Anda Tidak Boleh Menggunakan `shared_from_this` dalam Pembina?

Mengapa Anda Tidak Boleh Menggunakan `shared_from_this` dalam Pembina?

DDD
DDDasal
2024-11-06 06:14:02643semak imbas

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());

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