On Monday, 31 August 2015 at 11:29:21 UTC, ponce wrote:
On Saturday, 29 August 2015 at 13:14:26 UTC, ponce wrote:
Looks ugly? Yes, but it makes the GC acts as a cheap leak
detector, giving accurate messages for still opened resources.
So, let me tell a little success story while using the
"GC-proof" resource classes.
I tested the above idiom on some code I was a bit liberal with
and with no thought gone into clean-up.
I found all resource leaks in ~1 hour, and there was several of
them.
The open question that remains is: "can ~this() really be
called multiple times?", that would made the idiom less ugly
(had to add boolean flags for most resources).
It feels like calling ~this() twice is UB. What about:
```
class MyResource
{
void* handle;
this()
{
handle = create_handle();
}
close()
{
if (handle)
free_handle(handle)
handle = null;
}
~this()
{
enforce(!handle,"Resource leak");
}
}
```
Nice pattern either way.