gpt4 book ai didi

class - 具有成员 std::mutex(或其他不可复制对象)的类的复制或移动构造函数?

转载 作者:行者123 更新时间:2023-12-01 03:11:42 52 4
gpt4 key购买 nike

class A
{
private:
class B
{
private:
std::mutex mu;
A* parent = NULL;
public:
B(A* const parent_ptr): parent(parent_ptr) {}
B(const A::B & b_copy) { /* I thought I needed code here */ }
};
public:
B b = B(this); //...to make this copy instruction work.
// (Copy constructor is deleted, need to declare a new one?)
};

我有一个类 B这基本上是一个线程安全的任务队列。它包含一个 deque , mutex , 和 condition_variable .它促进了由类 A 启动的任何两个线程之间的消费者/生产者关系。 .我已经尽可能地简化了代码。

问题始于 mutex作为成员:这将删除默认的复制构造函数。这只是意味着我可以使用 B(this) 构建但我无法使用 B b = B(this) 构建和复制,这是我在最后一行中需要做的,以便给类(class) A类(class)成员 B .解决这个问题的最佳方法是什么?

最佳答案

简单的解决方案是使用 std::unique_ptr<std::mutex>在你的类中,并用 std::make_unique(...) 初始化它哪里...是你的 std::mutex构造函数参数,如果有的话。

这将允许移动但不允许复制。为了使其可复制,您需要在复制构造函数中初始化副本,假设副本应该有自己的锁。

如果副本应该共享那个锁,那么你应该使用 std::shared_ptr .那是可复制和可移动的。

关于class - 具有成员 std::mutex(或其他不可复制对象)的类的复制或移动构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37172050/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com