当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《创建条件变量的共享指针时出现问题》经验,为你挑选了1个好方法。

如果之前有人问我,我很抱歉,我无法在网上找到它.为什么编译器认为我试图调用复制构造函数std::condition_variable

#include 
#include 
#include 
#include 
#include 
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> m;
  m.push_back(std::make_shared(std::condition_variable{}));

  // no complains here
  std::vector> m_a;
  m_a.push_back(std::make_shared(A{}));

  return 0;
}

我得到的错误是我试图使用已删除的复制构造函数std::condition_variable..我想我想问的是为什么移动构造函数不会被调用make_shared



1> NathanOliver..:

std::make_shared(std::condition_variable{})

std::condition_variable{}创造一个std::condition_variable.这意味着std::make_sharedstd::condition_variable使用传递的参数构造它的内部,该参数调用复制构造函数.如果你需要一个默认构造,std::condition_variable那么你可以使用

std::make_shared()


@Curious它没有移动构造函数.
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有