struct opCast to void* and back
Justin Spahr-Summers
Justin.SpahrSummers at gmail.com
Sun Apr 11 10:33:28 PDT 2010
On Sun, 11 Apr 2010 10:41:29 -0400, Nrgyzer <nrgyzer at gmail.com> wrote:
> ...
>
> class MyClass {
>
> private static void function(void*) callBack;
> private static void* callBackValue;
> ...
> static this() {
> MyStruct test = MyStruct();
> test.structName = "Struct name";
> callBack = &cb;
> callBackValue = &test;
> }
In this function, 'test' is allocated on the stack and therefore only
exists for the duration of the function call. When the static
constructor finishes, any pointers directed at 'test' are basically
garbage and should never be used.
There are three workarounds:
1. Store 'test' in a place where it won't get destructed until you're
done using it.
2. Allocate 'test' on the heap by using a pointer and 'new'.
3. Change MyStruct into a class so objects are allocated on the heap by
default. This is probably the best solution for situations like this,
especially given your explanation of what you're trying to do.
More information about the Digitalmars-d
mailing list