首頁  >  文章  >  後端開發  >  為什麼不能在建構函式中使用“shared_from_this”?

為什麼不能在建構函式中使用“shared_from_this”?

DDD
DDD原創
2024-11-06 06:14:02643瀏覽

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

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

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