[英]Conditions for deletion of an std::shared_ptr
可以說我有以下幾點:
class Bar
{
public:
int i;
};
class Foo
{
public:
std::vector<std::shared_ptr<Bar>> vector;
};
class FooBar
{
public:
std::shared_ptr<Bar> myBar;
};
int main()
{
Foo foo;
FooBar foobar;
foobar.myBar = std::make_shared<Bar>();
foo.vector.push_back(foobar.myBar);
foobar.myBar = nullptr;
}
myBar和foo.vector.back()是否都等於nullptr? 他們都被刪除了嗎? 正確的方法是什么? 我的最終目標是能夠擁有一個指向對象的指針的向量,構造對象並將它們從另一個范圍放入該向量,然后在范圍內創建它們並刪除它們,並將其從向量中刪除。 我的思維過程是,如果我能以某種方式輕松地刪除指針的所有實例,那么我就可以檢查每個幀,以在等於nullptr的情況下從向量中刪除shared_ptr。
當您push_back
您將復制您插入的內容,在本例中為shared_ptr
。 因此,不,不會刪除該對象,因為shared_ptr
的副本仍然存在。 只要任何shared_ptr
仍指向該對象,它就保持活動狀態。
我在尋找什么,我認為是weak_ptr
。 如果從向量中拉出其中之一,則需要先將其轉換為shared_ptr
然后才能使用它,並且如果轉換失敗,則您知道該對象已刪除。
創建std::shared_ptr
,有以下選擇:
shared_ptr
或weak_ptr
。 在后兩種情況下,也可以復制指針,或者可以傳遞(邏輯上)相關的指針。
這些選擇以后可以重新討論。
僅在最后一個索償者釋放其索償時才調用清除( weak_ptr
僅計入管理對象)。
重要的部分是shared_ptr的副本對共享庫具有其自己的聲明,否則它與共享該聲明的任何其他對象完全獨立。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.