C ++管理共享对象的句柄问题

时间:2010-03-12 00:09:47

标签: c++ multithreading object sharing signals-slots

是否有管理由2个或更多其他对象共享的Object的最佳实践。即使在不同的线程上运行?

例如,创建A并将指向它的指针赋予B和C. ObjA A =新的ObjA(); B-> GiveObj(A); C-> GiveObj(A);

现在我该如何删除objA?

到目前为止我所知道的是A监视器有多少个ref,当这个计数器为0时它会删除它(例如当A通过时,接收器调用A-> Aquire(),当它完成时它调用A-> release();

或者我可以告诉B-> RemoveObj(A);和C-> RemoveObj(A);问题是如果B或C在不同的线程上运行,我不能删除A,直到它们完成A,并且他们已经看到了RemoveObj调用。 (这需要一堆凌乱的旗帜。)

有没有一种很好的方法可以做到这一点,可能使用Signal / Slot?

由于

1 个答案:

答案 0 :(得分:2)

最好的选择是使用智能指针实现,例如Boost's shared_ptr

这允许您根据需要传递指针,而不必担心删除。


编辑:

我刚刚意识到你添加了信号/插槽标签。如果您正在使用Qt,那么您可能需要QSharedPointer(或类似)而不是boost指针实现。