Copy constructors for lazy initialization
    Andrei Alexandrescu 
    SeeWebsiteForEmail at erdani.org
       
    Fri May 28 18:26:50 PDT 2010
    
    
  
Walter has had a great idea last night: allow classes to define
this(ref S src);
where S is the name of the struct being defined, as an alternative for
this(this);
The result would be a function similar with a C++ copy constructor.
Such an abstraction allows us to perform lazy initialization in a way 
that allows the kind of problems associated with non-shared hash tables:
void foo(int[int] x)
{
    x[5] = 5;
}
void main()
{
    int[int] x;
    foo(x);
    assert(x[5] == 5); // fails
}
If you change the first line of main() with
int[int] x = [ 42:42 ];
the assert passes.
The idea of the copy constructor is to lazy initialize the source and 
the target if the source has null state. That would take care of this 
problem and the similar problems for shared state.
There is still a possibility to call a method against an object with 
null state. I think that's acceptable, particularly because lazy 
initialization saves some state allocation.
What do you think?
Andrei
    
    
More information about the Digitalmars-d
mailing list