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

C++ 将Boost智能指针传递给线程函数,c++,multithreading,boost,smart-pointers,C++,Multithreading,Boost,Smart Pointers,我有一种情况,某个对象必须作为线程回调函数的参数传递。对象是动态创建的,在将其传递给线程后,该上下文(在启动线程的方法中)不再需要/使用该对象。线程函数现在是唯一应该拥有对象的上下文 假设我想使用一些Boost智能指针(而不是向线程传递原始指针),这里哪一个最合适?在这种情况下,最佳做法是什么? 我实际需要的是通过复制构造函数提供移动语义的std::auto_ptr。我相信这个智能指针非常适合这里,但由于众所周知的原因,它被弃用了(而且我不能依赖tr1和C++11指针;必须(并且希望)只使用Bo

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

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

我实际需要的是通过复制构造函数提供移动语义的
std::auto_ptr
。我相信这个智能指针非常适合这里,但由于众所周知的原因,它被弃用了(而且我不能依赖
tr1
C++11
指针;必须(并且希望)只使用Boost,因为此代码在必须在Visual Studio 2008和2010中编译的项目之间共享)

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

您可以使用,或者使用编写您自己的
唯一\u ptr


boost::interprocess::unique\u ptr
在其实现中使用boost.Move,而boost.Move模拟C++11移动语义C++03。

shared\u ptr
适用于大多数情况(包括您的情况)。您可以使用以下模式:

shared_ptr<MyT> param = .....;
thread = boost::thread(thread_routine, param);
param.reset();
shared_ptr param=。。。。。;
thread=boost::thread(thread_例程,param);
参数重置();

。。。现在只有thread_例程保存该对象。

我现在来看看
boost::interprocess::unique\u ptr
。谢谢你的帮助。是的,我知道这个解决方案,在我的情况下,我甚至不需要调用
reset
,因为
param
立即超出范围(该函数在创建线程后立即返回)。但我想知道Boost是否有任何支持移动语义的非引用计数智能指针。似乎我想要的是
boost::进程间::unique_ptr