相关疑难解决方法(0)

什么时候在C++ 11中制作一个不可移动的类型?

我很惊讶这没有显示在我的搜索结果中,我认为有人会在之前问过这个,考虑到C++ 11中移动语义的用处:

我什么时候必须(或者对我来说是个好主意)在C++ 11中创建一个不可移动的类?

(原因比与现有代码的兼容性问题,那是.)

c++ c++-faq move-semantics c++11

120
推荐指数
3
解决办法
1万
查看次数

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

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

c++ condition-variable shared-ptr c++11

3
推荐指数
1
解决办法
639
查看次数