|
Boost : |
From: Jeremy Siek (jsiek_at_[hidden])
Date: 2002-02-04 18:27:23
Nice description and motivation for move semantics.
On Mon, 4 Feb 2002, Howard Hinnant wrote:
hinnan>
hinnan> What remains to be done is to settle on a uniform syntax for move
hinnan> semantics. John Maddock has suggested:
hinnan>
hinnan> T b = std::move(a);
Would this mean we'd also have to rely on cooperation from operator=?
Wouldn't it be better to keep things simple with something like this
instead:
std::move(a, b); // a -> b
hinnan> Perhaps boost::auto_vector could experiment with this. The big
hinnan> stumbling block I've had to date is allowing move from a temporary T,
hinnan> but disallowing move from a const T, and packaging this up in a
hinnan> relatively reusable package so that giving your class move semantics is
hinnan> no harder than giving it copy semantics.
Well, non-const member functions have the property that you can call them
on temporaries but not on const objects. So you could do this:
a.move_to(b);
Of course, this would require invasive changes to current classes, and
couldn't have the same syntax for builtins.
Or perhaps we just need to file a DR to once again allow temporaries to be
bound to non-const references. On the surface that restriction made a lot
of sense, but deep down it was wrong.
Cheers,
Jeremy
----------------------------------------------------------------------
Jeremy Siek http://php.indiana.edu/~jsiek/
Ph.D. Student, Indiana Univ. B'ton email: jsiek_at_[hidden]
C++ Booster (http://www.boost.org) office phone: (812) 855-3608
----------------------------------------------------------------------
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk