Boost logo

Boost :

Subject: Re: [boost] Improving the assignment operators of various Boosttypes
From: Giovanni Piero Deretta (gpderetta_at_[hidden])
Date: 2008-09-11 06:46:17


On Thu, Sep 11, 2008 at 11:06 AM, Thorsten Ottosen
<thorsten.ottosen_at_[hidden]> wrote:
> Gevorg Voskanyan skrev:
>>
>> Giovanni Piero Deretta wrote:
>>
>>> If you do not want to deal with move emulation (which I've found very
>>> brittle in complex expressions), a simple way to to gain the advantage
>>> of T::operator=(T rhs) even when assigning from lvalues is something
>>> like:
>>>
>>> templateT destructive_copy(T& x) {
>>> using std::swap;
>>> T result;
>>> swap(result, x);
>>> return x;
>>> }
>>>
>>> which relies on NRVO to eliminate expensive copies:
>
> I think the best way (= most RVOs) to write the assignment operator is to
> take the T argument by value.
>

Uh? I do not understand how your statement relates to the code above.
The point of destructive_copy is to move out of lvalues (by
'converting' them to rvalues), not optimizing out copies of rvalues.

-- 
gpd

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