可能重复:
Visual Studio 2013 C++ - Passing std::unique_ptr to a bound function
我正在关注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博文中找不到任何主题。
所以,我的问题是:
- 我认为这个错误仍然是MSVC v140 Preview的问题吗?
- 是否有人有关于编译器或库团队是否/何时解决此问题的更多信息?
醇>
顺便说一下,我知道做一个裸指针并不是最好的事情就是将它包装成unique_ptr
,同时仍然留下裸指针。这是一个坏节目视频的例子。