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

Cur*_*ous 3 c++ condition-variable shared-ptr c++11

如果之前有人问我,我很抱歉,我无法在网上找到它.为什么编译器认为我试图调用复制构造函数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;
}
Run Code Online (Sandbox Code Playgroud)

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

Nat*_*ica 9

std::make_shared<std::condition_variable>(std::condition_variable{})
Run Code Online (Sandbox Code Playgroud)

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

std::make_shared<std::condition_variable>()
Run Code Online (Sandbox Code Playgroud)

  • @Curious它没有移动构造函数. (3认同)