D's equivalent to C++'s std::move?

Ali Çehreli via Digitalmars-d digitalmars-d at puremagic.com
Tue Feb 2 15:21:38 PST 2016


On 02/02/2016 03:09 PM, Ola Fosheim Grøstad wrote:
> On Tuesday, 2 February 2016 at 22:36:22 UTC, Ali Çehreli wrote:
>> This question has been brought up a lot lately. I've decided to look
>> at this more seriously yesterday.
>
> Nice to see that others are playing around with this, I don't have time
> to check your code, but one key issue with move semantics is exception
> safety.
>
> AFAICT D's "std.move" is insufficient, as it would null out the original
> pointer prematurely and when an exception is thrown the resource will
> disappear rather than simple remain "unmoved".
>

Exactly. I've saved my rear end by inserting a TODO comment just before 
posting the code: :p

         /* TODO: Be exception-safe; don't destroy before succesful
          * construction. */
         if (occupied) {
             destroy_at(i);
         }

         emplace(place, args);

Ali



More information about the Digitalmars-d mailing list