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>.