了解建構子中 Shared_from_this 的無法使用
查詢將重點放在在類別建構子中使用 Shared_from_this 的限制。為了解決這個問題,讓我們探討這個限制背後的技術原因。
Shared_ptr 的隱藏成員
Shared_from_this 是自引用的,依賴於新增至enable_shared_from_this 基底類別。然而,這個weak_ptr只有在創建第一個shared_ptr到Person之後才會被設定。
建構時間軸
類別建構子負責初始化其成員,包括建構enable_shared_from_this基底類別實例。在初始物件建構期間,還沒有指向 Person 的shared_ptr。
Shared_ptr 和Weak_ptr 之間的連接
考慮以下程式碼片段:
std::shared_ptr<Person> p(new Person());
在呼叫p(shared_ptr)的建構子之前,必須對表達式new Person() 求值,從而建構Person 物件。由於shared_ptr的建構子在建立Person物件之後運行,因此在Person的建構子階段,shared_ptr物件不存在,因此無法使用shared_from_this。
結論
技術上,shared_from_this在建構子中不可用,因為初始化內部weak_ptr所需的shared_ptr在物件完全建構完成之前不存在。這會阻止shared_from_this建立必要的自引用連線。
以上是為什麼不能在建構函式中使用“shared_from_this”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!