加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:36:54 所属栏目:百科 来源:网络整理
导读:如果之前有人问我,我很抱歉,我无法在网上找到它.为什么编译器认为我试图调用std :: condition_variable的复制构造函数? #include iostream#include utility#include vector#include memory#include condition_variableusing namespace std;class A { public
如果之前有人问我,我很抱歉,我无法在网上找到它.为什么编译器认为我试图调用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>()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读