GC for noobs

Namespace rswhite4 at googlemail.com
Thu Feb 27 04:32:33 PST 2014


On Thursday, 27 February 2014 at 12:25:49 UTC, Szymon Gatner 
wrote:
> On Thursday, 27 February 2014 at 11:13:17 UTC, bearophile wrote:
>> Szymon Gatner:
>>
>>>I just want them to do their cleanup first as they should.
>>
>> Why? Perhaps if you explain what's behind your needs better, 
>> people can help better.
>>
>> Bye,
>> bearophile
>
> In my specific example I am creating OpenGL Renderer. Renderer 
> class instance holds GLContext instance. After context creation 
> GL objects are created like textures and vertex buffers. Those 
> are Texture and VertexBuffer class instances too. It is 
> critical that those child resources are freed before GL context 
> is destroyed. Thing is, even tho Renderer keeps list of 
> Textures , VertexBuffers and  Context object, order of their 
> destruction is completely undefined making Context d-tor called 
> first and then child resources d-tors which ends in catastrophe.
>
> In C++ (which has a LOT of problems) this is a no-brainer. 
> Order of d-tors is fully defined. Sub-objects are destroyed 
> before parent d-tor is called so only thing to worry about is 
> the order of definition of members.
>
> This is just an example but I would think that it is something 
> rather important to have... What about child objects 
> un-registering themselves in d-tors from a list that parent 
> object holds and parent is destroyed first? What about 
> asynchronous completion handler object that should notify some 
> other object that it finished/not finished a job but a notifee 
> is already destroyed because application is being shut-down? I 
> honestly can't imagine how to reason about object graph 
> lifetimes in GC world and I am sure I am missing something very 
> basic. Probably a very different mindset.

I had the same problem in Dgame. Therefore I use shared pointers 
(https://github.com/Dgame/Dgame/blob/master/Graphics/Surface.d#L90) 
or if I have to use classes, I use this:

https://github.com/Dgame/Dgame/blob/master/Window/Window.d#L44
https://github.com/Dgame/Dgame/blob/master/Window/Window.d#L177

I put the instances in a module global array and the module dtor 
finalize the data.


More information about the Digitalmars-d-learn mailing list