move object from heap to stack

monarch_dodra monarchdodra at gmail.com
Thu Sep 20 09:05:08 PDT 2012


On Thursday, 20 September 2012 at 15:04:48 UTC, Namespace wrote:
> On Thursday, 20 September 2012 at 14:15:23 UTC, monarch_dodra 
> wrote:
>> On Thursday, 20 September 2012 at 14:09:29 UTC, Namespace 
>> wrote:
>>
>>> http://dpaste.dzfl.pl/edit/361a54eb
>>> With
>>> [code]
>>> @disable this(this);
>>> [/code]
>>> this don't work (as expected). But with the copy ctor but 
>>> without ".get" you earn a segmentation fault (as you can 
>>> see). So you can disable the copy ctor but without using .get 
>>> you're not get what you want. Even with scoped, but scoped's 
>>> getter name is too long.
>>
>> Wrong link.
>
> Try this: http://dpaste.dzfl.pl/9247af54

What did you expect? You are passing your OnStack by value. In 
this particular case, you are over destroying your OnStack!B, 
which in turn over destroyes his _a.

Reactivate the disable, and you'll see the problem blatantly:
http://dpaste.dzfl.pl/9e873033
/home/c192/c104.d(102): Error: struct c104.OnStack!(A).OnStack is 
not copyable because it is annotated with @disable

The "problem" with implicit cast is that *sometimes* you think it 
does it, but in fact, it doesn't. Here, it didn't.

The opCall expects Arg... so if you give it an OnStack, it 
accepts an OnStack. If you want it to take a T, you have to 
specify it, either in the template, or with get, or with a cast.

Here is a cast version, with this(this) disabled:
http://dpaste.dzfl.pl/837f44a9


More information about the Digitalmars-d-learn mailing list