Destruction in D
Idan Arye via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 1 11:37:40 PDT 2015
On Friday, 1 May 2015 at 17:45:02 UTC, bitwise wrote:
> On Friday, 1 May 2015 at 02:35:52 UTC, Idan Arye wrote:
>> On Thursday, 30 April 2015 at 23:27:49 UTC, bitwise wrote:
>>> Well, the third thing was just my reasoning for asking in the
>>> first place. I need to be able to acquire/release shared
>>> resources reliably, like an OpenGL texture, for example.
>>
>> If you want to release resources, you are going to have to
>> call some functions that do that for you, so you can't escape
>> that "special stack frame"(what's so special about it?) -
>> though the compiler might inline it.
>>
>> When you use a GC the compiler don't need to invoke the
>> destructor in the end of the scope because the object is
>> destroyed in the background, but that also means you can't
>> rely on it to release your resources, so languages like Java
>> and C# use try-with-resources and using
>> statements(corresponding) to call something at the end of the
>> scope and end up using that stack frame anyways.
>
> I'm not sure I understand you 100%, but my plan was to have an
> asset management system give out ref counted textures/etc.
> Whenever the last one went out of scope, the asset would be
> destroyed. This only works if the destructor is called on the
> graphics thread due to limitations of graphics APIs. In a
> single threaded C++ app, this is fine, destructors are called
> at end of scope. I was confused though, because like C#, D has
> both reference and value types. But, while in C#, value types
> still do not have destructors(grrr...) D structs do have
> destructors, which apparently run when the struct goes out of
> scope. However, the D port of my code will most likely use
> multithreaded rendering, which removes the guarantee that the
> assets will go out of scope on the graphics thread, so this
> idea is a no-go anyways.
Structs allow you to implement ref-counting smart pointers like
you can do in C++. There is an implementation in the standard
library: http://dlang.org/phobos/std_typecons.html#.RefCounted
But for something as structured and as heavy as gaming resources,
I would go for a more manual approach like a repository-style
architecture, where you manually tell the repository to
load/release the the resources.
More information about the Digitalmars-d-learn
mailing list