Boost logo

Boost :

Subject: Re: [boost] [optional] std::tr2::optional
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2011-11-19 05:27:23


> > 3. T is neither copyable nor moveable -- it is like a scope guard, or
> > boost::scoped_ptr. In this case optional<T> still provides assignment
by
> > making a "pseudo destructor call" followed by a call to placement new.

-- 
> > but this gives only basic guarantee.
> The guarantee is strong if the placement delete/new are marked
> noexcept, isn't it?
What I meant by "a >>pseudo destructor call<< followed by a call to
placement new." is a call to destructor w/o releasing the memory and then a
call to constructor w/o allocating memory:
ob.~T();
new (&ob) T( std::forward<Args>(args)... );
This trick will provide a strong guarantee if destructor and the
constructor are nothrow. While destructors usually are non-throwing, it is
rather unlikely that constructors would not throw: it is the constructors
that we often expect to throw in case of initialization failure.
Regards,
&rzej

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk