У меня есть общий указатель shared_ptr<T> pointer1(new T(1));
.
Теперь в какой-то другой части кода у меня есть явная копия pointer2
(думаю, она будет храниться в std::map
или каком-то другом контейнере). Допустим, что копия была сделана как map.insert(make_pair(key1, pointer1));
.
Я использую эту вторую копию только для предварительного кэширования некоторых данных, и это означает, что если основной указатель уже недействителен , нет необходимости хранить второй указатель. Что мне делать в этом случае?
Есть ли способ принудительно освободить память для второго указателя, если я знаю, что pointer1
стал недействительным в какой-то другой части моего кода?
Или я должен пойти по безобразному пути - время от времени проверять мою карту на наличие указателей, для которых ptr.unique()
установлено значение true
, и уничтожать их?
Может быть, какие-нибудь альтернативы / советы?
Редактировать - простой пример кода
std::map<int, shared_ptr<int> > map;
{
shared_ptr<int> pointer1(new int(5));
map.insert(std::make_pair(0, pointer1));
}
Есть ли способ / способ заставить карту содержать <0, shared_ptr[NULL]>
вместо <0, shared_ptr[5]>
после выполнения этих операций?
Спасибо