What is going on here?

via Digitalmars-d digitalmars-d at puremagic.com
Wed Mar 4 08:32:14 PST 2015


On Wednesday, 4 March 2015 at 15:43:15 UTC, Steven Schveighoffer 
wrote:
> On 3/4/15 8:43 AM, Shachar Shemesh wrote:
>
>> I'd expect A's destructor to run, which does not seem to be 
>> the case.
>
>
> I believe destructors are not run when you throw inside a 
> constructor. So plan to deallocate if the ctor throws:
>
> a = A(var + 1);
> scope(failure) destroy(a);

The spec says [1], that the first write to a field in a class's 
constructor is a construction, not an assignment. I assume this 
applies to structs as well. If so, this implies that the compiler 
already knows at each point which fields are already constructed. 
Why doesn't it automatically insert appropriate destructor calls 
then?

[1] http://dlang.org/class.html#field-init


More information about the Digitalmars-d mailing list