我想在接受 void* 的 C 函数中传递一个 shared_ptr。shared_ptr 中创建的对象将被销毁是否安全,何时可以销毁?喜欢,
class CBar
{
 public:
    CBar(){}
    ~CBar(){}
    void lock(){}
    void unlock(){}
};
//----------------------------------------------------
typedef struct element
{
   std::string filename;
   void (*cb)(std::string filename, void* data);
   void* data;
};
std::list<element> elm;
void reg(std::string filename, void (*cb)(std::string filename, void*data), void* data)
{
    element item;
    item.filename = filename;
    item.cb = cb;
    item.data = data;
}
void unreg(std::string filename)
{
   std::list<elements>::iter;
   for(iter=elm.begin();iter!=elm.end();++iter)
   {
      if((*iter).filename == filename)
      {
         elm.erase(iter);
         break;
      }
   }
}
void exec()
{
    std::list<element>::iterator iter;
    for(iter=elm.begin();iter!=elm.end();++iter)
    {
        (*iter).cb((*iter).filename,(*iter).data);
    }
}
//---------------------------------------------------
// in another source file
void cb(std::string filename, void* data)
{
   boost::shared_ptr<CBar> cbar = *(boost::shared_ptr<CBar>*)(data);
   cbar->lock();
}
void foo(std::string filename)
{
    //create the shared_ptr here.
    boost::shared_ptr<CBar> ffoo(new CBar);
    //then pass the shared_ptr object
    reg(filename, &cb, &ffoo);
}
int main()
{
   foo("file");
   exec();
   return 0;
}