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



我有以下结构,我想传入 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(。

最新更新