У меня проблема с тем, что я не могу избавиться от последнего общего указателя, и мне это действительно нужно.
Итак, у меня есть менеджер и некоторые рабочие потоки.Менеджер хранит коллекцию общих указателей на разные ресурсы.Работник может запросить у менеджера общий указатель на ресурс.Всегда будет 1 или более работников с общим указателем на ресурс.Моя конечная цель состоит в том, чтобы, когда все работники сделали с ресурсом, ресурс был удален.Однако в этой схеме менеджер всегда поддерживает общий указатель на ресурс, поэтому, даже если ни один работник не привязан к общему указателю, ресурс не будет удален, так как счетчик ссылок всегда должен быть не менее 1, так какменеджер висит на нем.Мне нужно, чтобы менеджер держался за общий указатель на ссылку, чтобы, если кто-то из рабочих пришел с просьбой об общем указателе, менеджер мог его предоставить.
edit: Когда ресурс создан, он уже есть у работника.Таким образом, при его создании количество ссылок должно быть два (у менеджера есть, а у одного работника).Когда количество ссылок достигает одного (только у менеджера), я бы хотел, чтобы он был удален.Если ресурс уже был удален и его ищет работник, ресурс должен быть воссоздан.
edit2: некоторый код:
SomeSharedPointer Manager::getResource(String unique_id)
{ // if unique id exists, return its mapped shared pointer, if unique id doesn't exist, create the resource, assign it a shared pointer, and stick it in the map
}
class Worker
{
SomeSharedPointer my_sp;
Worker()
{
String someUniqueId = "http://blah.com"
my_sp = Manager::getResource(someUniqueId);
// do some work on the resource
}
~Worker()
{
my_sp.reset(); // done with resource
}
}