derek at psych.ward
Sun Feb 11 12:34:53 PST 2007
On Sun, 11 Feb 2007 21:14:26 +0100, e-t172 wrote:
> The following does not work :
> import std.stdio;
> class Test
> void* ptr = cast(void*) this;
> (*(cast(Test*) ptr)).foo();
> void foo()
> int main()
> auto test = new Test();
> return 0;
> Result : segmentation fault
> Could one explain why ?
You need "(cast(Test) ptr).foo();" instead.
This is because 'void* ptr' contains the address of the object, and when
calling object members, you need to use a /reference/ to the object and not
the object itself. Casting 'ptr' to 'Test*' just tells the compiler to
assume that 'ptr' points to a Test object and then using the '*' operator
returns the object and not a reference to the object.
If, however you had cast 'ptr' to just a 'Test', this tells the compiler to
assume that 'ptr' contains a reference to the object and so it can then
find the member to invoke.
"Justice for David Hicks!"
More information about the Digitalmars-d-learn