簡體   English   中英

刪除std :: shared_ptr的條件

[英]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
  • 分享其他shared_ptrweak_ptr
  • 提出新的索賠要求。

在后兩種情況下,也可以復制指針,或者可以傳遞(邏輯上)相關的指針。
這些選擇以后可以重新討論。

僅在最后一個索償者釋放其索償時才調用清除( weak_ptr僅計入管理對象)。

重要的部分是shared_ptr的副本對共享庫具有其自己的聲明,否則它與共享該聲明的任何其他對象完全獨立。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM