[英]Is it possible to create a smart pointer to an object and pass this smart pointer as an argument to the constructor?
是否可以創建指向對象的智能指針並將該智能指針作為參數傳遞給構造函數? 我想在對象本身中使用指向該對象的智能指針。
auto player1 = std::make_shared<Player>(argument1, ..smartpointer_to_player1..);
如果您想讓一個類擁有一個shared_ptr
(或者更確切地說,是它的this
指針),則可以通過std::enable_shared_from_this
來實現此目的,而不是您提出的解決方案。 例如:
class Player : public std::enable_shared_from_this<Player> {
//... definition
std::shared_ptr<Player> GetPtr() { return shared_from_this(); }
};
通過繼承該類,它允許您通過在任何該類的成員函數中調用繼承的成員函數shared_from_this
來獲得一個指向this
指針的shared_ptr
(盡管該函數在構造函數中不可用)。 這種限制之一是該對象必須事先存儲在shared_ptr
否則將導致未定義的行為(在C ++ 17之前)或拋出std::bad_weak_ptr
(在C ++ 17及之后)。
無論如何,這可能會為您提供所需的功能,並且避免必須通過構造函數將shared_ptr
傳遞給自身。
如果對象需要指向其自身的共享指針,則應從std :: enable_shared_from_this繼承,然后通過在需要它的成員函數中調用shared_from_this()獲得共享指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.