String[] pointer to void* and back
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Sep 18 14:49:27 PDT 2014
On 09/18/2014 02:35 PM, seany wrote:
> struct S
> {
> void *v;
> }
>
> class C
> {
>
>
> S* sx = new S;
>
> void dothings()
> {
> string[] ss = ["1", "2", "4"];
Note that ss is a local variable of a druntime type equivalent of the
following:
struct D_Slice_of_strings_
{
size_t length;
string * ptr;
}
Although the elements that are accessed through .ptr are in dynamic
memory and owned by the GC, the local struct object (i.e. ss) itself is
on the program stack. It will be gone upon leaving dothings().
> string[] *s;
> void *vv;
>
> s = &ss;
> vv = s;
>
> sx.v = vv;
>
> }
As a demonstration, one solution is to make ss a member variable. Then,
it would live as long as v lived. However, ss can be in some other
long-lived container as well.
Ali
More information about the Digitalmars-d-learn
mailing list