On Thu, 12 Aug 2010 21:45:16 -0400, Jonathan M Davis
<jmdavisp...@gmail.com> wrote:
On Thursday, August 12, 2010 18:16:01 Graham St Jack wrote:
On 13/08/10 10:18, Jonathan M Davis wrote:
> On Thursday, August 12, 2010 17:38:28 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.
>>
>> 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.
>
> Hence the hack that is Rebindable!().
>
> Oh, and you _can_ achieve pointers to classes, but what you normally
use
> are references, which do have the problem of not being able to be
split
> between the reference and referent types.
>
> - Jonathan M Davis
So how do you get a pointer to an object? Taking the address of an
object reference gives you a pointer to the reference, not the object,
which is fair enough. As far as I know there isn't a way to get a
pointer to the object itself, and even if you could, how do you use such
a thing?
Hmm. I was thinking that you could just do
T* t = new T();
but that doesn't work. I know that people have talked about doing it
here on the
newsgroup, so there must be a way. You can do
T t1 = new T();
T* t2 = &t1;
but I guess that that's a pointer to a reference rather a pointer to the
object
itself. Maybe if you want pointers to classes you need to use manual
memory
manegement rather than the GC and new. Hopefully someone else can
enlighten us.
I have generally avoided pointers in D.
This is not a good idea. The type system treats class references
specially. Any attempt to use a pointer to reference the actual data will
most certainly end up being untyped and pretty much useless.
-Steve