Friday, February 13, 2009
Hoops to Jump Through
disable_shared_from_this
About once a year I end up thinking that using boost::enable_shared_from_this
is a good idea. And every time it ends up wasting almost an hour of my time. You see there's a restriction on shared_from_this
that disallows its use in the constructor of the object that is being shared from this. Unfortunately this restriction is not mentioned in the documentation. I always try to use shared_from_this
from the constructor and get bad weak pointer errors at run time. I then spend twenty minutes flailing around in the source code trying to figure out what I'm doing wrong until finally a bit of googling brings the not in the constructor restriction out in the open. Once I realize this and start trying to fix things so I don't need to use shared_from_this
in the constructor I find that I don't need enable_shared_from_this
at all. This happens every time. I'm guessing that most of the boost folks have had the same experience as well since they don't go out of their way to call attention to enable_shared_from_this
. Maybe I should stay away from libraries whose documentation can only be reached from a link in an answer to a FAQ about another library. That is just not a good sign.
boost::enable_shared_from_this
turned out to be useful.