首页 > 解决方案 > 在 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);

标签: c++pthreads

解决方案


问题是你的args结构有它自己的Buffer对象。当您构造它时,会生成一个通过引用传递的缓冲区的副本。添加元素时,它被添加到属于 的缓冲区argument,而不是request_buffer

您可以通过声明buffer为类中的引用来解决此问题:

struct args {
    Buffer &buffer;
    args(Buffer &rb): buffer(rb) { }
};

然后,这将存储对传入构造函数的缓冲区的引用,这样当您添加一个元素时,它将被添加到该缓冲区(request_buffer在您的示例中)。


推荐阅读