On Wednesday, 9 September 2015 at 07:19:58 UTC, Q wrote:
Hi. I'm playing around with D for a while and I would like to
switch. But here is one thing, I need an answer for. In the
Docs is mentioned that it is not sure that the DTor of a class
is called. But what if I have struct, which holds a C Handle
which is destroyed as soon as the struct gets destroyed (more
or less like a unique pointer) and I stick this struct into a
class (because I strongly need polymorphism)?
Then you have to make sure the class destruction happens and not
rely on the GC.
Can I be sure that the Handle is destroyed as soon as the class
is destroyed?
I think that yes, struct members are destroyed. But you need to
make sure the class is destroyed.
If so there are only two ways that come to mind:
1. the class holds only a pointer to the struct, which is
unsafe since I must guarantee that the struct lives as long as
the class
2. the class gets a close/finalize/destroy method (or is called
with the built in destroy method), which is a absolute nogo,
because it is absolutly sure that this can be forgotten.
Besides, we live in 2015 and that is not C where I have to
clean my code manually, so this option would be ridiculous :D
I'm gratefull for any answers and ideas.
I'm using the manual method after much hair-pulling:
http://p0nce.github.io/d-idioms/#GC-proof-resource-class
It absolutely is worse than the C++ situation, however with the
above pattern leaks will be reported by the GC, which is a nice
consolation prize.
Alternatively, stick your class in Unique! / Refcounted! / scoped!