DIP44: scope(class) and scope(struct)
deadalnix
deadalnix at gmail.com
Sat Aug 24 05:02:04 PDT 2013
On Saturday, 24 August 2013 at 00:45:46 UTC, H. S. Teoh wrote:
> I've written up a proposal to solve the partially-constructed
> object
> problem[*] in D in a very nice way by extending scope guards:
>
> http://wiki.dlang.org/DIP44
>
> [*] The partially-constructed object problem is when you have a
> class
> (or struct) that must acquire some number of external
> resources, usually
> to set them as member fields, but before the ctor is able to
> initialize
> all of these fields, an Exception is thrown. Now the object is
> in a
> partially-constructed state: some member fields have been
> initialized,
> and need to be destructed in order to release the associated
> external
> resources, but other fields are still uninitialized so should
> not be
> destructed. This leads to the problem of, how do we clean up in
> this
> situation? We can't call the dtor -- the dtor assumes *all*
> fields have
> been set and will wrongly try to release resources that haven't
> been
> acquired yet. But we can't ignore the issue either -- the
> resources that
> *have* been required need to be released somehow. This DIP
> proposes a
> nice solution to this problem that fits in very well with the
> existing
> scope guards in D.
>
> Destroy! ;-)
>
>
> T
I like the feature. I wouldn't say this is the most important
thing to add here, the same can be achieved with scope(failure)
and destructor.
More information about the Digitalmars-d
mailing list