On Sat, 02 May 2009 22:14:59 -0400, Rainer Deyke <rain...@eldwood.com> wrote:

Robert Jacques wrote:
On Sat, 02 May 2009 19:11:11 -0400, Rainer Deyke <rain...@eldwood.com>
wrote:
Given a value type 'T', you have the guarantee that no two variables of
type 'T' can alias each other.  This guarantee is preserved when the
type 'T' is non-copyable.

An argument of type 'ref T' can obviously alias a variable of type 'T'.

Okay, if T is not copyable, then I _must_ pass it as ref T, everywhere.
Which is reference semantics.

When passing arguments, (possibly const) ref is a reasonable default.  I
don't care about how arguments are passed.  I care about aliasing
between variables, especially member variables.

With reference semantics, two variables of type T can reference each
other.  With non-copyable types, they cannot.

  - RAII.

Can be done with structs or classes. Also see point 1. So, this isn't a
pro/con either way.

The D1 dynamic array type does not support RAII.

There are two parts to D's arrays. One a struct 2 words long, the other
is a chunk of ram. The first part is RAII, the second part is not
possible, since D doesn't allow dynamically sized memory allocation on
the stack.

It's meaningless to talk about RAII in the context of the "struct" part
of a D1 dynamic array, since it doesn't manage any resources.  If I
place a variable of a RAII type in a D1 dynamic array, it is not
properly destroyed when the array goes out of scope.  Therefore D1
dynamic arrays do not support RAII.

Stack versus heap allocation is an orthogonal issue.

RAII is all about stack allocation over heap allocation (or so I thought). Ah, wikipedia has set me straight. Anyways, now for the simple answer: you can't create D1 arrays with RAII types, I think. (Anyone tried scope Foo[] foo?) Anyways, in D2, if I remember correctly there's a bug where struct finilizers don't run if they're allocated on the heap. But if you're using classes for RAII like you should, the GC will run their finalizers just fine after the array dies. But this is an seems to be an issue about the elements/values inside the containers, not the container itself. So I'm lost.

Reply via email to