I’m thinking of using boost::weak_ptr to implement a pool of objects such that they will get reaped when nobody is using one of the objects. My concern, though, is that it’s a multi-threaded environment, and it seems there’s a race condition between the last shared_ptr to an object going out of scope and a new shared_ptr being constructed from the weak_ptr. Normally, you’d protect such operations with lock or something; however, the whole point here is that you don’t know when the shared_ptr might be going out of scope.
Am I misunderstanding something about boost::shared_ptr and boost::weak_ptr? If not, does anybody have any good suggestions on what to do?
Thanks.
Andrew
To use a
weak_ptr, you normally have to grab a strong reference by constructing ashared_ptrwith it. This last step is atomic: you either get a strong reference back, or you get abad_weak_ptrexception thrown. (Alternatively, calllock()on theweak_ptr, and either get a strong reference or null.)Example (with
lock(); easy enough to adapt to the other style):