On Friday, 10 October 2014 at 08:03:49 UTC, ketmar via Digitalmars-d wrote:
On Fri, 10 Oct 2014 01:32:51 +0000
dcrepid via Digitalmars-d <[email protected]> wrote:

So no possibility of using objects as resource acquire/release mechanisms. I assume using scoped with class objects will have a similar problem..
no, stack-allocated object is GC root, so anything it holds reference to will not be destroyed until stack object is alive. so destructor of
stack-allocated object *can* be used for doing cleanup.

but you can use templates to build your "anchor" structs. it's hard to
say without concrete code samples.

What I mean with the scoped objects is that you still need to provide a constructor with parameters, yes? I will have to try this out myself, but I've avoided it since some people seem to indicate this is going to be deprecated..

Basically what I was doing code-wise was creating a 'FixedBuffer' structure, which would have its size passed as a template parameter. The constructor would do a malloc on it, and all the checks for bounds would only need to rely on that template parameter. Net result is that the cost of having a pretty safe bounds-checked buffer was just the size of one pointer.

I *sorta* get the whole concept of being able to easily reason and work with structures in D, but why then does it have a destructor and a way to disable a default constructor, along with operator overloads and whatnot. It seems to me its trying to be object-like and POD-like at the same time which doesn't mesh well.

As far as the 'scoped' object, I was referring to default construction - is it possible? Or do I need to use Walter's factory production workaround everytime I want something with deterministic create/destroy properties in this context?

I would very readily accept using objects over structs if they had a guarantee of when they are destroyed, and weren't as risky to pass around as C pointers (i.e. possibility of them being null).

Reply via email to