Proposal : allocations made easier with non nullable types.

Christopher Wright dhasenan at gmail.com
Mon Feb 9 04:56:24 PST 2009


Michel Fortin wrote:
> On 2009-02-09 06:41:59 -0500, Ary Borenszweig <ary at esperanto.org.ar> said:
> 
>> How would you do this?
>>
>> X x;
>>
>> if(someCondition) {
>>    x = new SomeX();
>> } else {
>>    x =  new SomeOtherX();
>> }
> 
> Well, the declaration could be transformed to this:
> 
>     X x = new X;
> 
> But since x is not used before being reassigned (for all code paths), 
> the compiler could just leave it uninitialized until you do the 
> assignement yourself. But then perhaps the "new X" should not be elided 
> unless the constructor and and destructor are pure.

I don't trust that the compiler would do that.

> Another question is what happens when X is an abstract class.

Or when X has no default constructor. Or when X's default constructor 
allocates non-memory resources. Or when X's default constructor depends 
on global variables that those conditionals set and segfaults or throws 
when those globals are not in a consistent state. Or when X is a really 
huge class or does a lot of computation in its constructor and 
allocating it takes an unreasonable amount of time.

Any case in which the default constructor has side effects or 
preconditions is a problem.



More information about the Digitalmars-d mailing list