首頁  >  文章  >  後端開發  >  為什麼`shared_from_this()`不能直接在建構子中使用?

為什麼`shared_from_this()`不能直接在建構子中使用?

Patricia Arquette
Patricia Arquette原創
2024-11-05 21:00:04346瀏覽

Why Can't `shared_from_this()` Be Used Directly in Constructors?

理解建構函式中shared_from_this()的限制

shared_from_this()的概念對於從下列位置建立指向物件的共用指標似乎指向物件的共用指標很方便在其建構函數中。然而,它存在技術限制,無法直接使用。為了理解這個問題,讓我們探討一下底層機制:

謎題:自存儲shared_ptr和構造計時

根據書籍參考,shared_ptr存儲在enable_shared_from_this

  • 自儲存shared_ptr:儲存的shared_ptr是在類別外部建立的實際shared_ptr。
  • 建構時序:shared_ptr的儲存發生在Person建構過程結束時。

為什麼建構子中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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn