Classes in D and C++
Max Samukha
samukha at voliacable.com
Mon Mar 5 03:07:59 PST 2007
On Mon, 05 Mar 2007 12:10:53 +0200, Max Samukha
<samukha at voliacable.com> wrote:
>On Mon, 05 Mar 2007 20:15:04 +1100, Daniel Keep
><daniel.keep.lists at gmail.com> wrote:
>
>>
>>
>>Walter Bright wrote:
>>> Uno wrote:
>>>>> Its not possible it seems to do e.g this:
>>>>>
>>>>> X x(3);
>>>>>
>>>>> rather you have to do:
>>>>>
>>>>> X x = new X(3);
>>>>
>>>> Yep, I don't like that syntax too. Everywhere news.. And although D
>>>> has many great features such small things prevent me to switch to D.
>>>>
>>>
>>> You can do:
>>>
>>> auto x = X(3);
>>>
>>> and x will be put on the stack.
>>
>>Surely you mean
>>
>> scope x = X(3);
>>
>>Or did scope get rolled back into the auto keyword again while I wasn't
>>looking? >_<
>
>I think he means structs:
>
>struct X{
> static X opCall( int n_in){
> X x;
> return x;
> }
> }
>
>void main()
>{
> auto x = X(1); //allocates x of type X on stack and assigns
>the result of X.opCall(1) to it.
>
> X x1 = 1; // does the same thing to x1
>
> x1 = cast(X)2; //calls X.opCall(2) and assigns the result to
>x1;
>}
>
>Scope classes are allocated on stack but still require 'new'.
>
>class X
>{
> this(int n_in)
> {
> }
>
> ~this()
> {
> }
>}
>
>void test()
>{
>` scope auto x = new X(1); // x allocated on stack
>} //~this called on x on scope exit
>
>void main()
>{
> test();
>}
Correction: surely not classes are allocated but objects.
More information about the Digitalmars-d
mailing list