C++ 从传入的引用变量中分配引用变量
C++ Assigning reference variable from passed in reference variable?
我试图避免使用全局变量,因为我不知道代码将来需要如何扩展,所以我希望能够生成具有独立互斥锁的多个线程。我正在尝试将互斥体和条件变量传递到类构造函数中。
头文件:
class Receiver {
private:
std::mutex & _global_mtx;
std::condition_variable & _global_cv;
bool & state;
public:
// Construct
Receiver(std::mutex &, std::condition_variable &, bool &);
};
代码文件:
/*-------------------------------------
Construct
--------------------------------------*/
Receiver::Receiver(std::mutex & mtx, std::condition_variable & cv, bool & state){
_global_mtx = mtx;
}
这显然会导致问题,因为_global_mtx
已经声明为引用变量,所以我不确定如何将引用从 mtx
传递到 _global_mtx
.
另外,我知道在声明引用时,您必须为其分配一个值以引用(可能是 NULL),那么有没有更好的方法来处理我正在做的事情? 我确信我不是第一个也是唯一一个遇到这种需求的人,但我不确定在哪里寻找答案。
引用不能默认初始化。他们必须提到一些东西。所以你必须初始化_global_mutex
.在构造函数初始化列表中执行此操作:
Receiver::Receiver(std::mutex & mtx, std::condition_variable & cv, bool & state)
: _global_mtx(mtx),
_global_cv(cv),
state(state)
{
}
这同样适用于其他数据成员。
对我来说
,你的代码看起来有些混乱和混乱。
在大多数情况下,互斥锁(如果您使用的是互斥锁,则为关联的条件变量)应直接与某些数据相关联。换句话说:你有一段将在线程之间共享的数据。您将互斥锁与该数据相关联以保护它,因此一次只有一个线程可以访问数据。
在这种情况下,您通常希望使用共享数据的实例、互斥锁和(如果需要)条件变量来设计类。你几乎从不想单独创建它们,然后像你在问题中尝试的那样将它们提供给类。虽然可以使用成员初始值设定项列表修复初始化引用的近期(主要是语法)问题,但这很少是正确的答案。
在大多数情况下,正确的答案是让所有这些成员成为同一对象的成员,并提供对成员数据执行操作的成员函数,并根据需要锁定和解锁 mutext。
相关文章:
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 多个"常量引用"变量可以共享同一个内存吗?
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- C++方法中的引用变量
- 作为赋值(增加引用变量)C++的左操作数所需的左值
- 使用更改此变量的函数在同一行中打印引用变量
- 将延迟变量分配给引用变量
- 如何通过引用获取引用变量的地址?
- 将引用变量传递给函数
- C++中引用变量的内存?
- 按名称存储和引用变量列表
- 返回一个C++引用变量 VS 返回一个变量
- c++ 在 if 语句中分配引用变量
- 引用变量何时合适,为什么?你能解释一下实际的语法和位置吗?
- C++ - 将一个变量分配给另一个变量和将变量分配给引用变量有什么区别?
- 在类范围内声明时,应在 C++14 中引用变量模板
- 当引用变量的引用"死亡"时,它会发生什么?
- 将非按引用变量分配给返回按引用的函数,反之亦然
- 引用变量如何存储在mem中
- 引用变量存储在哪里