
On Saturday 03 May 2008 13:52, Peter Dimov wrote:
Frank Mori Hess:
What I'm thinking is more along the lines of how a weak_ptr goes from "expired" to "good". Currently, that can only happen by assignment of a new shared_ptr. And assignment of one expired weak_ptr has no effect on any copies of the weak_ptr, they stay expired.
This is correct as far as it goes. But in the case I showed, no assignment happens to any of the weak_ptr instances. Consider how weak_ptrs go from use_count of 1 to use_count of 0 without any assignment. This is the same event in reverse. It can't normally occur now, of course.
Remember that use_count() does not report the state of a particular instance, it reports program-wide state (the number of shared_ptr instances sharing ownership with *this). It can and will go up and down without any changes to *this.
Well, okay the changes I described for a "reserved" weak_ptr could be left as unspecified implementation details, except for the throwing of an alternate exception for a reserved weak_ptr. Although, it could just store the "expired or reserved?" information in the bad_weak_ptr object. As far as I know, there is nothing much specified about what the interface of the bad_weak_ptr class has to look like. -- Frank