Я узнал много о weak_ptr, работающем с share_ptr для повреждения циклической ссылки.Как это работает? Как использовать это? Какое-либо тело может дать мне пример? Я полностью потерян здесь.
Еще один вопрос, что такое сильный указатель?
Оно не включается в счетчик ссылок, поэтому ресурс может быть освобожден даже при наличии слабых указателей. При использовании weak_ptr вы получаете от него shared_ptr, временно увеличивая счетчик ссылок. Если ресурс уже освобожден, получение shared_ptr не удастся.
Q2: shared_ptr - сильный указатель. Пока существует какой-либо из них, ресурс не может быть освобожден.
Сильный указатель содержит сильную ссылку на объект - это означает: пока существует указатель, объект не уничтожается.
Объект не «знает» каждый указатель по отдельности, а только их количество - это сильный счетчик ссылок.
Тип weak_ptr «запоминает» объект, но не предотвращает его уничтожение. Вы не можете получить доступ к объекту напрямую через слабый указатель, но вы можете попытаться создать сильный указатель из слабого указателя. Если объект больше не существует, результирующий строгий указатель будет нулевым:
shared_ptr<int> sp(new int);
weak_ptr<int> wp(sp);
shared_ptr<int> stillThere(wp);
assert(stillThere); // yes, the original object still exists, we can now use it
stillThere.reset(); // releasing the strong reference
sp.reset(); // here, the object gets destroyed,
// because there's only one weak_ptr left
shared_ptr<int> notReally(wp);
assert(!notReally); // the object is destroyed,
// you can't get a strong pointer to it anymore