理解建構函式中shared_from_this()的限制
shared_from_this()的概念對於從下列位置建立指向物件的共用指標似乎指向物件的共用指標很方便在其建構函數中。然而,它存在技術限制,無法直接使用。為了理解這個問題,讓我們探討一下底層機制:
謎題:自存儲shared_ptr和構造計時
根據書籍參考,shared_ptr存儲在enable_shared_from_this
為什麼建構子中shared_from_this()受到限制?
建構子中shared_from_this()的限制是由於建構的順序性質造成的。當 Person 的建構子正在執行時,還沒有建立可以指向 Person 物件的共用指標。 Shared_ptr 是在 Person 建構之後在外部建立的。
shared_from_this() 的底層機制
enable_shared_from_this提供了一種在物件內建立隱藏的weak_ptr的方法。然後,該weak_ptr 被在物件外部建立的第一個shared_ptr 使用來初始化自身。然而,這種初始化僅在外部建立shared_ptr時發生。
結論
雖然shared_from_this()允許從類別外部建立指向物件的共用指針,但它的在建構函式中的使用受到建構順序的限制。物件建構完成後,必須在外部建立shared_ptr。這是確保共享指標正確運作的技術限制。
以上是為什麼`shared_from_this()`不能直接在建構子中使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!