В общем и целом,
Сильные указатели гарантируют собственную действительность. Используйте их, например, когда:
- Вы владеете объектом, на который указывает; Вы создаете это и уничтожаете это
- У вас нет определенного поведения, если объект не существует
- Вы должны убедиться, что объект существует.
Слабые указатели гарантия зная свою действительность. Используйте их, например, когда:
- Вы получаете к нему доступ, но он не ваш.
- Вы определили поведение, если объект не существует
Lock () для слабого указателя возвращает сильный указатель; Вот как вы получаете доступ к слабому указателю. Если объект больше не действителен (он был удален и т. Д.), То сильный указатель будет равен NULL, в противном случае он будет указывать на объект. Вам нужно будет это проверить.
Он настроен таким образом, что вы не можете случайно удалить объект во время его использования, поскольку вы создали временный (локальный) сильный указатель и, таким образом, гарантировали существование объекта, пока этот сильный указатель остается. Когда вы закончите использование объекта, вы обычно позволяете сильному указателю выпадать из области видимости (или переназначать его), что затем позволяет удалить объект. Для многопоточности обращайтесь с ними так же осторожно, как и с другими, которые не имеют встроенной безопасности потоков, отмечая, что гарантия, упомянутая выше , будет при многопоточности. AFAIK, они не делают ничего особенного после этого.
Улучшенные общие указатели также имеют функции, подобные сборщику мусора, поскольку, когда последний сильный указатель на объект исчезает или указывает куда-то еще, объект удаляется.
Там также производительность и круговые зависимости, упомянутые в других ответах.
По сути, я бы сказал, что библиотека улучшенных общих указателей позволяет вам не мешать составлять программу, но это не заменит время для правильной разработки ваших указателей, владения объектами и времени жизни. Если у вас есть такой дизайн, вы можете использовать библиотеку для его реализации. Если у вас нет такого дизайна, вы, скорее всего, столкнетесь с другими проблемами, чем раньше.