Я пытаюсь передать объекты по значению между потоками с очередью.передать объект по значению между потоками
Поскольку существует несколько разных объектов, я создал абстрактный класс.
class message
{
public :
virtual ~message(){};
};
то у меня есть подкласс для каждого типа сообщения
class a_specific_message : public message
{
...
};
Я прочитал this tutorial для реализации очереди, и я называю это следующим образом:
concurrent_queue<message> queue;
a_specific_message m{1, 2, 3};
queue.push(m);
Моя проблема что мне нужно переопределить operator=
, чтобы очередь могла клонировать сообщение
popped_value=the_queue.front();
Я попытался добавить виртуального оператора, но он не вызывается в подклассе.
Я не знаю, как я мог достичь чего-то подобного, не передавая объект по ссылке.
'concurrent_queue' держит ** объекты ** типа 'сообщение'. Когда вы вставляете объект производного типа в очередь, объект получает разрез, и все, что было сохранено, является частью его сообщения. Невозможно вернуть исходный объект, как только это произойдет. Вам нужна очередь, содержащая ссылки или указатели. –
@PeteBecker Я испугался, что это произойдет. Как я могу убедиться, что другой поток удалит объект, когда он будет сделан? – Marc
Звучит как работа для 'shared_ptr' (которая является потокобезопасной) – Donnie