创建条件变量的共享指针时的问题
Issues when creating a shared pointer of condition variable
如果之前有人问过这个问题,我很抱歉,我无法在网上找到它。为什么编译器认为我正在尝试调用 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;
}
我得到的错误是我正在尝试使用 std::condition_variable
的已删除复制构造函数。我想我想问的是为什么在调用 [= 时不调用移动构造函数13=]
Why does the compiler think that I am trying to call the copy constructor of std::condition_variable?`
这就是编译器在您调用时将使用的内容
std::make_shared<std::condition_variable>(std::condition_variable{})
std::make_shared
使用任何将接受传递给它的参数的构造函数。在这种情况下,复制构造函数就是一个。
来自http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared:
args - list of arguments with which an instance of T will be constructed.
在
std::make_shared<std::condition_variable>(std::condition_variable{})
std::condition_variable{}
创建一个 std::condition_variable
。这意味着 std::make_shared
将使用调用复制构造函数的传递参数构造它的内部 std::condition_variable
。如果你需要一个默认构造的 std::condition_variable
那么你可以使用
std::make_shared<std::condition_variable>()
如果之前有人问过这个问题,我很抱歉,我无法在网上找到它。为什么编译器认为我正在尝试调用 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;
}
我得到的错误是我正在尝试使用 std::condition_variable
的已删除复制构造函数。我想我想问的是为什么在调用 [= 时不调用移动构造函数13=]
Why does the compiler think that I am trying to call the copy constructor of std::condition_variable?`
这就是编译器在您调用时将使用的内容
std::make_shared<std::condition_variable>(std::condition_variable{})
std::make_shared
使用任何将接受传递给它的参数的构造函数。在这种情况下,复制构造函数就是一个。
来自http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared:
args - list of arguments with which an instance of T will be constructed.
在
std::make_shared<std::condition_variable>(std::condition_variable{})
std::condition_variable{}
创建一个 std::condition_variable
。这意味着 std::make_shared
将使用调用复制构造函数的传递参数构造它的内部 std::condition_variable
。如果你需要一个默认构造的 std::condition_variable
那么你可以使用
std::make_shared<std::condition_variable>()