Часть 1
Не у каждого объекта может быть один владелец. Нам надо убедиться, что объект уничтожен и освобождён, когда исчезает последняя ссылка на него. Таким образом, нам необходима модель разделённого владения объектом. Допустим, у нас есть синхронная очередь, sync_queue, для общения между задачами. Отправитель и получатель получают по указателю на sync_queue:
4.2 Разделённое владение shared_ptr
Не у каждого объекта может быть один владелец. Нам надо убедиться, что объект уничтожен и освобождён, когда исчезает последняя ссылка на него. Таким образом, нам необходима модель разделённого владения объектом. Допустим, у нас есть синхронная очередь, sync_queue, для общения между задачами. Отправитель и получатель получают по указателю на sync_queue:
void startup()
{
sync_queue* p = new sync_queue{200}; // опасность!
thread t1 {task1,iqueue,p}; // task1 читает из *iqueue и пишет в *p
thread t2 {task2,p,oqueue}; // task2 читает из *p и пишет в *oqueue
t1.detach();
t2.detach();
}