Graham St Jack wrote:
For me, the key problem is that a class object reference has the same const/immutable/shared attribute as the object on the heap that it refers to. This is sometimes what you need, but more often you want a non-shared, mutable reference to a const/immutable/shared object.

I struggled with this for a long while before I eventually came to the conclusion that I was thinking about class objects as a reference and the instance, and that those two were separable concepts. They are not. A reference type is implicitly treated like a value type as far as accessing its members go. Trying to separate out the two is a fundamental misunderstanding of what reference types are all about. Semantically, they are much more than just a pointer to the instance.


You can achieve this with pointers for arrays, structs and primitive types, but not with classes because a class pointer is just a pointer to a reference.

The way to do it with class is take a pointer to the class:

  class C { ... }

  const(C)*[];    // array of pointers to const classes

just like you'd do with a struct.

Reply via email to