important proposal: scope keyword for class members
Sean Kelly
sean at invisibleduck.org
Sun Mar 8 15:49:44 PDT 2009
John Simon wrote:
> Sean Kelly Wrote:
>
>> John Simon wrote:
>>> Sean Kelly Wrote:
>>>> Oh, I should mention that I'm not sure how the compiler would handle
>>>> this scenario:
>>>>
>>>> class A { byte[16]; }
>>>> class B { byte[32]; }
>>>> class C {
>>>> this( bool b ) {
>>>> if( b ) o = new A;
>>>> else o = new B;
>>>> }
>>>> scope Object o;
>>>> }
>>>>
>>>> If I had to guess I'd say that the compiler would either reserve the max
>>>> size necessary to store both A or B, or that in non-trivial cases it
>>>> just wouldn't bother with reserving space for o at all.
>>> Wrong. The Object is constructed when it comes into scope, and destructed when it leaves scope. Classes can't have an 'opAssign', instead the reference is reassigned. Since the reference is invariant/immutable here, this throws a compile time error.
>> I'm talking about a proposed new feature, not an existing one. Please
>> take this example in context.
>
> Sorry man, I thought you were disputing with me. My apologies. Let me rephrase.
>
> I believe that 'scope' declared objects shouldn't allow an assignment of a derived type. Reasoning being that there wouldn't be enough stack space allocated for it.
>
> So in your example above, Object could only recieve a 'new Object', and nothing further down in the hierarchy.
Ah, that makes sense. And it's an easy rule to follow.
More information about the Digitalmars-d
mailing list