理解建構函式中shared_from_this的限制
如《C標準函式庫》摘錄中所述,shared_from_this()面臨著一個技術問題構造函數內的限制。要理解這個概念,有必要深入研究shared_from_this()的內部運作原理。
弱指標在shared_from_this中的作用
shared_from_this()依賴於一個內部的weak_ptr 維護對創建的物件的弱引用。這個弱指標保持未初始化狀態,直到為該物件建立強shared_ptr(擁有該物件的shared_ptr)。只有在實例化第一個shared_ptr後,物件的基底類別enable_shared_from_this才能存取這個shared_ptr並初始化weak_ptr。
構造時序問題
這個依賴現有的shared_ptr給構造函數帶來了問題。當呼叫建構函式時,尚不存在指向正在建構的物件的shared_ptr。因此,在建構過程中,enable_shared_from_this無法初始化其weak_ptr,進而導致shared_from_this()在建構子中無法使用。
澄清範例
請考慮以下程式碼片段:
class Person : public std::enable_shared_from_this<Person> { ... }; std::shared_ptr<Person> p(new Person());
在此範例中,Person() 的建構子在shared_ptr p 的構造函數之前運行。這表示在Person()建構函式期間,不存在指向Person物件的shared_ptr,從而禁止enable_shared_from_this初始化其weak_ptr並導致建構函式內無法存取shared_from_this()。
以上是為什麼不能在建構函式中使用'shared_from_this()”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!