std :: unique_ptr作为std :: thread中的函数参数

时间:2015-11-23 11:50:27

标签: c++ multithreading visual-studio c++11 unique-ptr

所以我试图将std::unique_ptr作为参数传递给在单独的线程中启动的函数,并且我在编译时遇到一个奇怪的错误:

1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional(1149): error C2280: 'std::unique_ptr<Widget,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function

此代码的简化版仍然会重现相同的问题:

#include <thread>
#include <memory>
#include <iostream>

class Widget
{
public:
  Widget() : m_data(0)
  {
  }

  void prepareData(int i)
  {
    m_data = i;
  }

  int getData() const
  {
    return m_data;
  }

private:
  int m_data;
};

void processWidget(std::unique_ptr<Widget> widget)
{
  std::cout << widget->getData() << std::endl;
}

int main()
{
  std::unique_ptr<Widget> widget(new Widget());
  widget->prepareData(42);

  std::thread t(processWidget, std::move(widget));
  t.join();

  return 0;
}

我的猜测是Widgetmain(对象的破坏有问题,但我无法确定问题。是否有必要做一些额外的事情来清理那个变量?顺便说一句,我使用的是VS2013。

0 个答案:

没有答案