Bypassing the postblit?

monarch_dodra monarchdodra at gmail.com
Sun Dec 29 11:26:08 PST 2013


On Sunday, 29 December 2013 at 18:27:16 UTC, Benjamin Thaut wrote:
> No unfortunately not. You could solve the issue by adding 
> another level of indirection. So always allocate the additional 
> indirection, then its save to copy it, and then you can lazy 
> instaniate the actual instance when needed and all copies of 
> your wrapper will see the instance.
>
> Kind Regards
> Benjamin Thaut

Even with that, you'd still have to make sure the newly inserted 
indirection gets initialized *prior* to the copy, so it's back to 
square one...

> Am 29.12.2013 17:22, schrieb Ritu:
>> Ok, I will give you some background of what I am trying to do.
>>
>> I have a struct that wraps a class object and lazily 
>> initializes it. Now
>> in case the struct instance is passed as an argument to a 
>> function and
>> it has not been initialized yet, the default copy constructor 
>> and the
>> postblit do not offer a possibility to initialize the class 
>> object
>> before copying.
>>
>> Any possibility of *preblit* kind functionality?
>>
>> Regards
>> - Ritu

Nope. What you are asking for is basically a default constructor, 
which D does not provide. Workarounds include the "static opCall" 
pattern, as well as the "function builder" pattern (eg: "MyStruct 
myStruct(Args args)")


More information about the Digitalmars-d mailing list