1
我想在接受void *的C函數中傳遞shared_ptr。 shared_ptr中創建的對象是否會被銷燬以及何時可以銷燬?像,在回調中將shared_ptr轉換爲void *
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;
}
那麼如何以及何時可以銷燬? – domlao
'typedef struct element'甚至合法嗎?你沒有鍵入任何東西。 –