Passing this to void *
Tim Hsu
tim37021 at gmail.com
Wed Nov 22 15:42:13 UTC 2017
On Wednesday, 22 November 2017 at 15:36:22 UTC, Adam D. Ruppe
wrote:
> On Wednesday, 22 November 2017 at 15:31:36 UTC, Tim Hsu wrote:
>> It seems in D, reference has its own address, am I right?
>> unlike c++
>
> The local variable does have its own address. Do not take its
> address - avoid &this or &object.
>
> Just cast the ref itself.
>
>
> In D, a class this or Object variable is already like a C++
> Foo*. If you & that, you get a Foo** - not what you want in
> most cases.
Thanks after doing some experiment I guess I finally understand
class App {
@property void *ptr() {
return cast(void *)(this);
}
}
void printaddr(void *ptr)
{
writeln(ptr);
}
void main()
{
Pizza pza = new Pizza("XD");
Pizza pza2 = pza;
printaddr(pza.ptr);
printaddr(pza2.ptr);
printaddr(&pza);
printaddr(&pza2);
}
Result:
A32000
A32000
19FDB0
19FDB4
Conclusion:
pza and pza2 is two different reference variable refer to same
new-ed object.
More information about the Digitalmars-d-learn
mailing list