c++ - 在 c++ 的结构构造函数中将变量作为引用传递
问题描述
我有以下结构,我想传入 Buffer 对象作为引用,以便在创建不同线程时可以将内容推送到队列中(Buffer 类有一个字符串队列)。我的问题是队列没有通过引用更新。就像大小仍然为零一样。
struct args{
Buffer buffer;
args( Buffer& rb){
buffer = rb;
}
};
这是我执行将元素添加到缓冲区的函数的代码:
void* addElement(void* arguments){
args* myArgs = (args*) arguments;
myArgs->buffer.push("John Smith);
}
以下是创建线程并将字符串添加到缓冲区的代码:
Buffer request_buffer;
pthread_t request_thread;
thread_args* argument = new args(request_buffer);
pthread_create(&request_thread,NULL,addElement,argument);
解决方案
问题是你的args
结构有它自己的Buffer
对象。当您构造它时,会生成一个通过引用传递的缓冲区的副本。添加元素时,它被添加到属于 的缓冲区argument
,而不是request_buffer
。
您可以通过声明buffer
为类中的引用来解决此问题:
struct args {
Buffer &buffer;
args(Buffer &rb): buffer(rb) { }
};
然后,这将存储对传入构造函数的缓冲区的引用,这样当您添加一个元素时,它将被添加到该缓冲区(request_buffer
在您的示例中)。
推荐阅读
- python - 将带有 MultiIndex 的 pandas DataFrame 与包含新标签的数据附加,但保留旧 MultiIndex 的整数位置
- powershell - 如何使用 PowerShell 执行不安全连接?
- scala - Scala:找到两个列表之间的区别
- angular - Angular / Ionic 中的 Observables
- android - Android 发布的应用程序无法访问互联网 Xamarin
- c# - 不能在接口的实现中使用更通用的属性类型?
- database - Spark MapWithState 管理会话状态
- java - android opencv 3.4.1 构建命令失败。未定义的引用
- c++ - 功能在特定时间内消耗墙壁时间
- c# - WPF组合框不以双向更新