创建条件变量的共享指针时出现问题
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
.. 我想我想问的是为什么不调用移动构造函数make_shared
in
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 的复制构造函数?
这就是编译器在调用时将使用的内容
std::make_shared<std::condition_variable>(std::condition_variable{})
std::make_shared
使用任何将接受传递给它的参数的构造函数。在这种情况下,复制构造函数是一个。
从 http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared:
args - 用于构造 T 实例的参数列表。
相关文章:
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针问题
- C++ 关于指针取消引用的技术问题
- C++中的指针和常量问题不大
- 包含矢量指针的结构的内存释放问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- 将字节数组转换为带有字节序问题的指针
- 关于如何使用指向主窗口的指针的 QT 问题
- 当成员值从指针更改为非指针时,C++常量问题
- 为什么循环会导致指针出现问题?
- 使用指针计算堆栈问题的大 O 表示法
- 构造函数 (C++) 中的 char 指针参数存在问题
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- 涉及指针和手动实现的矩阵类的问题
- 从基指针到派生的强制转换问题
- 迭代器的指针操作问题
- 64 位迁移问题:指针更改
- C++模板使用问题指针
- 跳到C++第13章练习问题4-指针
- 用std::pair数组初始化std::map问题(指针错误?)