1

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

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

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

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

4

2 回答 2

2

您可以使用boost::interprocess::unique_ptrunique_ptr ,或者使用Boost.Move编写自己的。

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

于 2012-05-22T16:44:56.983 回答
0

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

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

...现在只有 thread_routine 持有该对象。

于 2012-05-22T17:03:15.007 回答