Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
February 15, 2017 Get the address of an object, within the object itself | ||||
---|---|---|---|---|
| ||||
Hi all, sorry if this question is silly, but is it possible to get the address of an object within the object itself? e.g. class Node { this() { writeln(&this); // Doesn't work } } auto node = new Node(); writeln(&node); // Does work Thanks very much, Cheers, Andrew. |
February 15, 2017 Re: Get the address of an object, within the object itself | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrew Chapman | On Wednesday, February 15, 2017 21:27:00 Andrew Chapman via Digitalmars-d- learn wrote:
> Hi all, sorry if this question is silly, but is it possible to get the address of an object within the object itself?
>
> e.g.
>
> class Node
> {
> this()
> {
> writeln(&this); // Doesn't work
> }
> }
>
> auto node = new Node();
> writeln(&node); // Does work
This does _not_ give you the address of the Node object. It gives you the address of the reference.
- Jonathan M Davis
|
February 15, 2017 Re: Get the address of an object, within the object itself | ||||
---|---|---|---|---|
| ||||
On Wednesday, February 15, 2017 13:33:23 Jonathan M Davis via Digitalmars-d- learn wrote:
> On Wednesday, February 15, 2017 21:27:00 Andrew Chapman via Digitalmars-d- learn wrote:
> > Hi all, sorry if this question is silly, but is it possible to get the address of an object within the object itself?
> >
> > e.g.
> >
> > class Node
> > {
> >
> > this()
> > {
> >
> > writeln(&this); // Doesn't work
> >
> > }
> >
> > }
> >
> > auto node = new Node();
> > writeln(&node); // Does work
>
> This does _not_ give you the address of the Node object. It gives you the address of the reference.
IIRC, the only way to get the address of the object itself would be to cast it to void*, but it's not something that I do normally, so I'd have to experiment a bit to be sure.
- Jonathan M Davis
|
February 15, 2017 Re: Get the address of an object, within the object itself | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On Wednesday, 15 February 2017 at 21:37:12 UTC, Jonathan M Davis wrote:
> On Wednesday, February 15, 2017 13:33:23 Jonathan M Davis via Digitalmars-d- learn wrote:
>> On Wednesday, February 15, 2017 21:27:00 Andrew Chapman via Digitalmars-d- learn wrote:
>> > Hi all, sorry if this question is silly, but is it possible to get the address of an object within the object itself?
>> >
>> > e.g.
>> >
>> > class Node
>> > {
>> >
>> > this()
>> > {
>> >
>> > writeln(&this); // Doesn't work
>> >
>> > }
>> >
>> > }
>> >
>> > auto node = new Node();
>> > writeln(&node); // Does work
>>
>> This does _not_ give you the address of the Node object. It gives you the address of the reference.
>
> IIRC, the only way to get the address of the object itself would be to cast it to void*, but it's not something that I do normally, so I'd have to experiment a bit to be sure.
>
> - Jonathan M Davis
Thanks Jonathan. Good point about the reference address. I can work around this quite easily, but I was curious. I will try the void* cast and see what happens.
Cheers.
|
February 16, 2017 Re: Get the address of an object, within the object itself | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrew Chapman | On 2017-02-15 22:42, Andrew Chapman wrote: > Thanks Jonathan. Good point about the reference address. I can work > around this quite easily, but I was curious. I will try the void* cast > and see what happens. If it's only for printing you can use the C "printf" without any casting: import core.stdc.stdio; class Node { this() { printf("%p\n", this); } } void main() { new Node; } -- /Jacob Carlborg |
Copyright © 1999-2021 by the D Language Foundation