Cur*_*ous 3 c++ condition-variable shared-ptr 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
在
std::make_shared<std::condition_variable>(std::condition_variable{})
Run Code Online (Sandbox Code Playgroud)
std::condition_variable{}创造一个std::condition_variable.这意味着std::make_shared将std::condition_variable使用传递的参数构造它的内部,该参数调用复制构造函数.如果你需要一个默认构造,std::condition_variable那么你可以使用
std::make_shared<std::condition_variable>()
Run Code Online (Sandbox Code Playgroud)