[英]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
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.