Передача переменной в качестве ссылки в конструктор структуры в C ++ - PullRequest
0 голосов
/ 18 октября 2018

У меня есть следующая структура, и я хочу передать объект 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 голосов
/ 18 октября 2018

Проблема в том, что у вашей args структуры есть собственный Buffer объект.При его создании создается копия буфера, который передается по ссылке.Когда вы добавляете элемент, он добавляется в буфер, который принадлежит argument, а не request_buffer.

. Вы исправите это, объявив buffer ссылкой в ​​классе:

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

Затем будет сохранена ссылка на буфер, переданный конструктору, так что при добавлении элемента он будет добавлен в этот буфер (request_buffer в вашем примере).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...