Struct beeing moved around
Michel Fortin
michel.fortin at michelf.com
Fri May 20 10:28:48 PDT 2011
On 2011-05-20 10:30:33 -0400, Sean Kelly <sean at invisibleduck.org> said:
> On May 20, 2011, at 5:14 AM, Benjamin Thaut wrote:
>
>> The following program:
>>
>> import std.stdio;
>>
>> struct test {
>> this(this){
>> writefln("postblit");
>> }
>>
>> int foo;
>>
>> this(int i){
>> foo = i;
>> writefln("%x",&foo);
>> }
>>
>> ~this(){
>> writefln("%x",&foo);
>> }
>> }
>>
>> void main(string[] args){
>> test t = test(5);
>> }
>>
>>
>> Gives me this output on dmd 2.052:
>> 18fe58
>> 18fe54
>>
>> Is this a bug in 2.052? (Doesn't happen with 2.053)
>> Why did the location of the struct change?
>> Is there any way to get informed about a struct beeing moved?
>> Is there a way to prevent it?
>
> In main above you're declaring a new struct variable t which is
> default-constructed, then a temporary is created and initialized to 5,
> and then the temporary is copied onto t. It does seem like a postblit
> should probably occur in this scenario though.
Postblit is a post-copy constructor, not a post-move one. There is no
such thing as a post-move constructor in D: structs are assumed to be
movable.
If the compiler was constructing the struct in place (instead of moving
it) it'd be even better, but that's more a question of optimization
than semantics.
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list