Re: Cannot predict if shared_from_this will throw
Chris Thomasson ha scritto:
"Alberto Ganesh Barbati" <AlbertoBarbati@libero.it> wrote in message
In other words, calling shared_from_this() when *this is not owned by a
shared_ptr invokes undefined behaviour.
[...]
Right, this is due to the fact that shared_ptr does not "currently" provide
the means for supporting the strong thread-safety guarantee:
http://groups.google.com/group/comp.programming.threads/browse_frm/thread/e5167941d32340c6
In other words, you cannot acquire a reference to a data-structure if it is
not already owned by the calling thread...
With all due respect, you are making a big confusion here. The issue is
totally unrelated with threads. The standard says "There shall be at
least one shared_ptr instance p that owns &t." It doesn't mention
threads and in particular it doesn't require anything that might sound
like "There shall be at least one shared_ptr instance p that owns &t /in
the current thread/."
The fact is that most probably the shared_ptr that owns *this is tied
with the lifetime of *this in the following way:
shared_ptr<T> p(new T);
so there will always be a shared_ptr owning *this for the whole lifetime
of *this. Destroying the last pointer to *this eventually invokes the
destructor, so if another thread calls shared_from_this() (which
accesses *this!) at the same time, you have probably a much bigger
problem to face than a simple race condition.
Just my opinion,
Ganesh
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]