我很惊讶这没有显示在我的搜索结果中,我认为有人会在之前问过这个,考虑到C++ 11中移动语义的用处:
(原因等比与现有代码的兼容性问题,那是.)
如果之前有人问我,我很抱歉,我无法在网上找到它.为什么编译器认为我试图调用复制构造函数std::condition_variable?
#include <iostream>
#include <utility>
#include <vector>
#include <memory>
#include <condition_variable>
using namespace std;
class A {
public:
A() = default;
A(A&&) = default;
A& operator=(A&&) = default;
A(const A&) = delete;
A& operator=(const A&) = delete;
};
int main() {
std::vector<std::shared_ptr<std::condition_variable>> m;
m.push_back(std::make_shared<std::condition_variable>(std::condition_variable{}));
// no complains here
std::vector<std::shared_ptr<A>> m_a;
m_a.push_back(std::make_shared<A>(A{}));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是我试图使用已删除的复制构造函数std::condition_variable..我想我想问的是为什么移动构造函数不会被调用make_shared