what to do with postblit on the heap?

Steven Schveighoffer schveiguy at yahoo.com
Mon Jun 20 16:07:03 PDT 2011


On Mon, 20 Jun 2011 18:43:30 -0400, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:

> On 2011-06-20 15:12, Steven Schveighoffer wrote:
>> BTW, I now feel that your request to make a distinction between move and
>> copy is not required. The compiler currently calls the destructor of
>> temporaries, so it should also call postblit. I don't think it can make
>> the distinction between array appending and simply calling some other
>> function.
>
> If an object is moved, neither the postblit nor the destructor should be
> called. The object is moved, not copied and destroyed. I believe that  
> TDPL is
> very specific on that.

Well, I think in this case it is being copied.  It's put on the stack, and
then copied to the heap inside the runtime function.  The runtime could be
passed a flag indicating the append is really a move, but I'm not sure
it's a good choice.  To me, not calling the postblit and dtor on a moved
struct is an optimization, no?  And you can't re-implement these semantics
for a normal function.  The one case I can think of is when an rvalue is
allowed to be passed by reference (which is exactly what's happening here).

Is there anything a postblit is allowed to do that would break a struct if
you disabled the postblit in this case?  I'm pretty sure internal pointers
are not supported, especially if move semantics do not call the postblit.

-Steve


More information about the Digitalmars-d mailing list