c – 创建条件变量的共享指针时出现问题

c – 创建条件变量的共享指针时出现问题,第1张

概述如果之前有人问我,我很抱歉,我无法在网上找到它.为什么编译器认为我试图调用std :: condition_variable的复制构造函数? #include <iostream>#include <utility>#include <vector>#include <memory>#include <condition_variable>using namespace std;cl 如果之前有人问我,我很抱歉,我无法在网上找到它.为什么编译器认为我试图调用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的调用调用移动构造函数

解决方法 在

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>()
总结

以上是内存溢出为你收集整理的c – 创建条件变量的共享指针时出现问题全部内容,希望文章能够帮你解决c – 创建条件变量的共享指针时出现问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1221521.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存