如何在void*和boost共享ptr之间进行转换

Yon*_*Nir 4 c++ boost casting void-pointers shared-ptr

我有这些线:

typedef boost::shared_ptr<A> A_SPtr;
void *f(void* var){ ...
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这样的事情:

A_SPtr instance = (void*)(var);
Run Code Online (Sandbox Code Playgroud)

我该怎么做?另外,我怎样才能将另一种方式从shared_ptr转换为void*?

Dav*_*rtz 6

只需指向指向共享指针的指针void *.

  1. shared_ptrvoid *:

    f (reinterpret_cast<void *>;(&A_SPtr));
    
    Run Code Online (Sandbox Code Playgroud)
  2. void *回到shared_ptr:

    A_SPtr instance = * reinterpret_cast(boost::shared_ptr<A>*)(var);
    
    Run Code Online (Sandbox Code Playgroud)

注意:这会将指针传递给指向线程的共享指针.如果共享指针在线程函数的生命周期中不存在,则这将不起作用 - 否则,线程将具有指向不再存在的对象(共享指针)的指针.如果您无法满足该要求,请在线程完成后将指针传递给新的 shared_ptr delete.(或boost:bind直接使用与共享指针一起使用的.)

  • @ user18853`reinterpret_cast <void*>(new std :: shared_ptr <A>(A_SPtr))`并将其传递给线程.在线程中,当你完成它时,你将它转换回`std :: shared_ptr <A>*`和`删除`它. (2认同)