我發現了一個類似的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復位總是過期?
我發現了一個類似的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復位總是過期?
是的,這是有保證的。調用
sp.reset();
是
shared_ptr().swap(*this)
相當於這意味着sp
現在回默認構造的狀態。如果我們的標準看use_count
我們
返回:
shared_ptr
對象,包括*this
與*this
,或0
該股權的數量,當*this
是空。
而且由於它是空的,use_count
是0
和expried
將是真正爲expried
檢查是否被管理的對象已經被刪除。相當於
use_count() == 0
。
是的,expired()
相當於use_count()==0
。 use_count()
被定義爲返回共享管理對象的實例的數目shared_ptr
。一旦您撥打sp.reset()
該號碼爲零。
@ tobi303該問題詢問當您使用同一個對象重置'shared_ptr'時會發生什麼。這個問題詢問當你沒有對象重置時會發生什麼。 – GuyRT
@GuyRT哦,這當然是一個區別。忽略了......近距離投票撤回 – user463035818