将 Boost 智能指针传递给线程函数
Passing a Boost smart pointer to the thread function
我遇到过一些对象必须作为线程回调函数的参数传递的情况。对象是动态创建的,在传递给线程后,在该上下文中不再需要/使用对象(在启动线程的方法中)。线程函数现在是唯一应该拥有对象的上下文。
假设我想使用一些 Boost 智能指针(而不是将原始指针传递给线程),哪一个在这里最合适?在这种情况下,最佳做法是什么?
我真正需要的是通过复制构造函数std::auto_ptr
它的移动语义。我相信这个智能指针非常适合这里,但由于众所周知的原因,它已被弃用(我不能依赖tr1
和C++11
指针;必须(并且想要)仅使用 Boost,因为此代码在必须在 Visual Studio 2008 和 2010 中编译的项目之间共享)。
boost::shared_ptr
是一种选择 - 我可以按值传递它,但认为这会矫枉过正。是否有机会用boost::scoped_ptr
模拟移动语义(以安全的方式)?我在这里不需要引用计数,因为我没有在两个上下文之间共享对象,我只想将对象的所有权从一个上下文转移到另一个上下文。
您可以使用
boost::interprocess::unique_ptr,也可以使用Boost.Move编写自己的unique_ptr
。
boost::interprocess::unique_ptr
在其实现中使用Boost.Move,Boost.Move模拟C++11移动语义C++03。
shared_ptr
适用于大多数情况(包括您的情况)。您可以使用此模式:
shared_ptr<MyT> param = .....;
thread = boost::thread(thread_routine, param);
param.reset();
。现在只有thread_routine持有对象。
相关文章:
- C++使用params创建线程函数会导致转换错误
- 如何在大函数中编写多线程函数?
- C++11:将矢量元素作为线程传递到线程函数中
- 线程函数中的c++参数更改
- 我需要线程函数在不停止实际程序的情况下,每2秒打印一次随机数
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 将项目插入 CTreeCtrl 时线程函数的奇怪行为
- C++ 线程函数通过引用传递
- 线程函数参数的前向声明不起作用
- 线程函数无法从堆上分配的缓冲区中读取字符
- 线程函数不打印
- C :如何在复杂模板类中指定线程函数
- 为什么我在C++线程函数调用中得到重复值?
- C++ 线程函数指针实现返回错误无效使用非静态成员函数
- 线程函数中的通用引用
- 如何同时启动两个具有不同线程函数的线程团队
- std::c++ 中的线程在设置线程函数时不会出错
- 对抽象类的引用不能传递给线程函数?
- 如何将ifstream作为参数传递给std ::线程函数
- 如何线程函数