C++ 在c+中的结构构造函数中将变量作为引用传递+;

C++ 在c+中的结构构造函数中将变量作为引用传递+;,c++,pthreads,C++,Pthreads,我有下面的结构,我想传入Buffer对象作为引用,这样我可以在创建不同的线程时将队列(Buffer类有一个字符串队列)中的内容推入。我的问题是队列没有通过引用更新。就像这个尺寸仍然是零 struct args{ Buffer buffer; args( Buffer& rb){ buffer = rb; } }; 以下是我的代码,用于执行将元素添加到缓冲区的函数: void* addElement(void* arguments){ args* myArgs = (a

我有下面的结构,我想传入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);
以下是创建线程和向缓冲区添加字符串的代码:

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
struct有自己的
Buffer
对象。构造缓冲区时,将创建一个通过引用传递的缓冲区副本。添加元素时,它将添加到属于
参数
的缓冲区,而不是
请求缓冲区

通过将
buffer
声明为类内的引用来解决此问题:

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

然后,这将存储对传递给构造函数的缓冲区的引用,这样当您添加元素时,它将被添加到该缓冲区中(
request\u buffer

如果您将这三个代码段复制并粘贴到一个文件中,并尝试编译它,它将不会编译。如果我填上缺失的部分,它会在我的机器上工作。。。我可能忽略了正在审查的bug。A会很有帮助的。