将Boost智能指针传递给线程函数

时间:2012-05-22 16:34:49

标签: c++ multithreading boost smart-pointers

我有一种情况,一些对象必须作为线程回调函数的参数传递。对象是动态创建的,在传递给线程之后,不再需要/在该上下文中使用对象(在启动线程的方法中)。线程函数现在是应该拥有该对象的唯一上下文。

假设我想使用一些Boost智能指针(而不是将一个原始指针传递给线程),哪一个最适合?在这种情况下,最佳做法是什么?

我真正需要的是std::auto_ptr,其移动语义通过复制构造函数。我相信这个智能指针完全适合这里,但由于众所周知的原因而被弃用(我不能依赖tr1C++11指针;必须(并且想要)使用 Boost < / em>仅在必须在 Visual Studio 2008 2010 中编译的项目之间共享此代码时。

boost::shared_ptr是一个选项 - 我可以通过值传递它,但认为它会过度使用。 有没有机会用boost::scoped_ptr模拟移动语义(以安全的方式)?我不需要在这里引用计数,因为我没有在两个上下文之间共享对象,我只想转移对象从一个上下文到另一个上下文的所有权。

2 个答案:

答案 0 :(得分:2)

您可以使用boost::interprocess::unique_ptr,或使用Boost.Move撰写自己的unique_ptr

boost::interprocess::unique_ptr在其实现中使用Boost.Move,Boost.Move模拟C ++ 11移动语义C ++ 03。

答案 1 :(得分:0)

shared_ptr适用于大多数情况(包括您的情况)。您可以使用此模式:

shared_ptr<MyT> param = .....;
thread = boost::thread(thread_routine, param);
param.reset();

...现在只有thread_routine保存对象。