Dla boost::weak_ptr
zdefiniowano , dzięki czemu można go używać w pojemnikach asocjacyjnych.kolejność sortowania boost :: weak_ptr after expiring?
Moje pytanie brzmi: Czy porządek sortowania kilku obiektów weak_ptr
jest stabilny, nawet jeśli niektóre z nich zmieniają się na zerowy poziom zerowy? Czy to nie jest bałagan z pojemnikami takimi jak std::set
?
Przykład:
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
- będzie dochodzić nr 2 zawsze prawdziwe jeśli assert # 1 jest prawdziwe?
- Czy
wptrA2
jest w tym samym stanie przed i po Zakresie 1?
Interesujące. Byłem zdezorientowany przez dokumentację use_count w http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/weak_ptr.htm. Podaje "Zwraca: 0, jeśli * to jest puste", jednak zgodnie z twoją odpowiedzą, zwrot (* to jest puste, jeśli zwraca 0) nie jest prawdziwy, prawda? (Jeśli puste jest zdefiniowane jako stan uzyskany z domyślnego konstruowania pliku weak_ptr.) –
Nie sformułowałem żadnych stwierdzeń o tym, co tutaj robi 'use_count'. Oznacza to, że wewnętrzna struktura zliczająca odniesienia utrzymuje dwa zliczenia - jeden dla silnych referencji (gdy osiąga zero, wskazany obiekt jest niszczony) i taki, który zawiera zarówno silne, jak i słabe odniesienie (gdy osiąga zero, struktura zliczająca odniesienia jest niszczona). Funkcja 'use_count' może wyglądać tylko na silnego licznika, ale ja nie badałem w ogóle, więc sprawdź sam. :) – bdonlan