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;
}