将变量作为引用传递给C ++中的struct构造函数

时间:2018-10-17 22:46:55

标签: c++ pthreads

我具有以下结构,我想传入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);

1 个答案:

答案 0 :(得分:0)

问题在于您的args结构具有它自己的Buffer对象。构造它时,将复制通过引用传递的缓冲区。添加元素时,该元素将被添加到属于argument而不是request_buffer的缓冲区中。

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

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

然后,它将存储对传递给构造函数的缓冲区的引用,以便在添加元素时将其添加到该缓冲区(在您的示例中为request_buffer)。