将std :: unique_ptr移动到std :: async中

时间:2014-11-20 06:45:10

标签: c++ c++11 move unique-ptr visual-studio-2015

  

可能重复:

     

Visual Studio 2013 C++ - Passing std::unique_ptr to a bound function

     

Invoking a function taking a unique_ptr with std::async

     

std::async with std::unique doesn't compile

我正在关注Introduction to C++ Concurrency LiveLessons视频,但遇到了障碍。当然,教师有一个特殊的Visual Studio版本,可以编译下面的代码,但对我来说,下面的代码不能在MSVC v120或v140 Preview(Windows 8.1)中编译。但是,它确实在GCC 4.8.2和Clang 3.4(Ubuntu Linux 14.04)中编译:

#include <thread>
#include <future>
#include <memory>
#include <iostream>
#include <utility>

struct Counter
{
   int n;

   Counter(int k)
      : n(k)
   {
   }
};

int main()
{
   Counter* pCount = new Counter(10);
   std::unique_ptr<Counter> puCount(pCount);
   std::future<void> fut = std::async([](std::unique_ptr<Counter> p)
   {
      ++(p->n);
   }, std::move(puCount));
   fut.wait();
}

Visual Studio编译器错误是:

error C2280: 'std::unique_ptr<Counter,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function

在我对其他问题的快速调查中,似乎问题是Visual Studio编译器的一个现有错误,它试图复制我的unique_ptr而不是将其移动到我的std::async呼叫。我也环顾四周,但在C++11/14/17 Features In VS 2015 Preview博文中找不到任何主题。

所以,我的问题是:

  
      
  1. 我认为这个错误仍然是MSVC v140 Preview的问题吗?
  2.   
  3. 是否有人有关于编译器或库团队是否/何时解决此问题的更多信息?
  4.   

顺便说一下,我知道做一个裸指针并不是最好的事情就是将它包装成unique_ptr,同时仍然留下裸指针。这是一个坏节目视频的例子。

0 个答案:

没有答案