我如何插入到向量类包括条件变量?



我试着用一个包含条件变量的类插入向量,我的代码如下:

class LockRequest {
public:
LockRequest( ) : granted_(false) {}
bool granted_;
};
class LockRequestQueue {
public:
std::list<LockRequest> request_queue_;
std::condition_variable cv_;  // for notifying blocked transactions on this rid
bool upgrading_ = false;
};
int main(){
LockRequestQueue request;
std::vector<LockRequestQueue> vecs;
vecs.push_back(request);
return 0;
}

,但我得到错误。当我移除条件变量cv_时,结果是正确的。我该如何解决这个问题?

std::condition_variable不是

  • 复制可构成的,
  • 移动可构成的,
  • 副本可分配或
  • 移动可转让的。

所以直接将其作为成员添加到任何类中也会将这些条件添加到该类中.
为了避免这种情况,我们使用了额外的间接层,例如,std::unique_ptr保存指向它的指针。

class LockRequestQueue {
public:
LockRequestQueue() // make a condition variable and assign it to the unique_ptr
:cv_(std::make_unique<std::condition_variable>())
{}
std::list<LockRequest> request_queue_;
std::unique_ptr<std::condition_variable> cv_;  //notice the unique_ptr
bool upgrading_ = false;
};

现在,在我们的main()函数中,我们使用std::move来压入向量,因为std::unique_ptr本身是不可复制构造的:

int main()
{
LockRequestQueue request;
std::vector<LockRequestQueue> vecs;
vecs.push_back(std::move(request)); //notice the std::move
return 0;
}