簡體   English   中英

到期后boost :: weak_ptr的排序順序?

[英]sort order of boost::weak_ptr after expiring?

對於boost::weak_ptr ,定義了operator< ,以便可以在關聯容器中使用它。

我的問題是:幾個weak_ptr對象的排序順序是否穩定,即使它們中的一些變為零的引用數量? std::set這樣的容器不會搞亂嗎?

例:

using namespace boost;
shared_ptr<A> sptrA1(new A);
weak_ptr<A> wptrA1 = sptrA1;
weak_ptr<A> wptrA2;

{ // begin Scope 1
    shared_ptr<A> sptrA2(new A);
    wptrA2 = sptrA2;
    assert(wptrA1 < wptrA2); // assert #1
}
assert(wptrA1 < wptrA2); // assert #2
  • 如果斷言#1為真,斷言#2總是成立嗎?
  • 在范圍1之前和之后, wptrA2是否處於相同的狀態?

boost::weak_ptr的當前實現中, operator<比較指向內部引用計數跟蹤結構的指針。 在刪除所有強引用和弱引用之前,不會釋放此結構,因此使用operator<仍然是安全的,即使由於缺少強引用而已釋放指向的用戶數據。

在這里閱讀weak_ptr比較。

使用std :: owner_less。 這比較了使用計數的指針,而不是指針本身。 例如:

typedef std::weak_ptr<int> IntWPtr;
std::set<IntWPtr, std::owner_less<IntWPtr> > m_set;

暫無
暫無

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

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