2017-06-09 51 views
0

我發現了一個類似的question,但我的示例稍有不同。在shared_ptr重置後,weak_ptr是否總是過期?

這是一個很簡單的例子:

int main() 
{ 
    auto sp = std::make_shared<T>(); 
    std::weak_ptr<T> wp = sp; 
    sp.reset(); 
    assert(wp.expired()); 
} 

它是保證在上述情況下的weak_ptr後的shared_ptr復位總是過期?

+1

@ tobi303該問題詢問當您使用同一個對象重置'shared_ptr'時會發生什麼。這個問題詢問當你沒有對象重置時會發生什麼。 – GuyRT

+0

@GuyRT哦,這當然是一個區別。忽略了......近距離投票撤回 – user463035818

回答

4

是的,這是有保證的。調用

sp.reset(); 

shared_ptr().swap(*this) 

相當於這意味着sp現在回默認構造的狀態。如果我們的標準看use_count我們

返回:shared_ptr對象,包括*this*this,或0該股權的數量,當*this

而且由於它是空的,use_count0expried將是真正爲expried

檢查是否被管理的對象已經被刪除。相當於use_count() == 0

3

是的,expired()相當於use_count()==0use_count()被定義爲返回共享管理對象的實例的數目shared_ptr。一旦您撥打sp.reset()該號碼爲零。

相關問題