首頁 > 後端開發 > C++ > 主體

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

DDD
發布: 2024-11-06 06:14:02
原創
640 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!