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