對於boost::weak_ptr
operator<
已定義,因此它可用於關聯容器中。到期後boost :: weak_ptr的排序順序?
我的問題是:幾個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
- 將斷言#2始終保持爲真,如果斷言#1是真的嗎?
- 是
wptrA2
在範圍1之前和之後處於相同狀態?
有趣。我對http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/weak_ptr.htm中的use_count文檔感到困惑。它聲明「返回:0,如果*這是空的」,然而根據你的回答相反(*這是空的,如果它返回0)是不正確的,對嗎? (如果empty被定義爲從默認構造weak_ptr獲得的狀態) – 2011-01-21 18:22:03
我還沒有對這裏的'use_count`做什麼聲明:)也就是說,內部引用計數結構保留兩個計數 - 一個僅用於強引用(當它達到零時,被指向的對象被銷燬),一個包含強和弱引用(當它達到零時,引用計數結構被銷燬)。 `use_count`函數可能只查看強計數的函數,但我沒有調查過,所以請自行驗證。 :) – bdonlan 2011-01-21 19:19:07