$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Nat Goodspeed (nat_at_[hidden])
Date: 2008-01-16 09:44:38
Elli Barasch wrote:
> Is there a way I can "new" a copy of the shared_ptr onto the stack?  
> Something like:
> 
> pthread_create(&t,&attr,&func,(void *) new shared_ptr<T>(shp));    
> //mangled syntax, I know
> 
> Something like this would guarantee the object stays in scope?
   Do you control the code that accepts that void* argument?
   Maybe something like the following could work:
1. Before pthread_create(), instantiate a new shared_ptr<Foo> on the 
heap. That is, make a heap shared_ptr that points to your target Foo 
object. You now have in your hand a plain shared_ptr<Foo>*.
2. Cast your plain shared_ptr<Foo>* to void* and pass it into 
pthread_create().
3. In the new thread, cast the opaque void* back to shared_ptr<Foo>*. 
Copy the heap shared_ptr<Foo> into a local shared_ptr<Foo>, then delete 
the heap shared_ptr<Foo>.