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