Boost logo

Boost :

From: Rene Rivera (grafik.list_at_[hidden])
Date: 2005-12-07 11:52:11

Yuval Ronen wrote:
> Peter Dimov wrote:
>>The reference adds a strong exception safety guarantee. If the shared_ptr
>>constructor fails, the source auto_ptr is left intact. Pass by value would
>>have already zeroed out the source.
>>If you want to achieve the equivalent of pass by value, you can use an
>>explicit .release().
>>This warning would actually be an error on a stricter compiler.
>>One happy day the compiler writers will bring us the rvalue reference, the
>>constructor will take auto_ptr &&, and all will be well with the world. :-)
> Does that mean that on a stricter compiler, when passing a temporary
> auto_ptr, I *have* to use the '.release()' way, and *can't* get the
> strong exception guarantee?

Yes, and no. It means it can't be a temporary if you want the strong
exception guarantee. I.e. you would have to assign the temporary to an
lvalue first:

auto_ptr<X> a = returns_some_auto_ptr_x();
shared_ptr<X> b(a);

-- Grafik - Don't Assume Anything
-- Redshift Software, Inc. -
-- rrivera/ - grafik/
-- 102708583/icq - grafikrobot/aim - Grafik/

Boost list run by bdawes at, gregod at, cpdaniel at, john at