std::weakptr используется для предотвращения циклов памяти в C++ следующим образом: когда два или более ресурса, управляемых объектами sharedptr, содержат ссылающиеся друг на друга объекты shared_ptr, то есть образуется цикл, количество ссылок никогда не становится нулевым, а узлы в цикле никогда не освобождаются. 2
Чтобы исключить цикл, один из указателей в цикле делают слабым (weakptr). 34 Так как weakptr не влияет на количество ссылок ресурса, когда последний объект sharedptr, который управляет этим ресурсом, будет освобождён, даже если есть weakptr объекты, указывающие на этот ресурс. 2
Например, цикличный связанный список с тремя элементами содержит головной узел N0, который включает объект sharedptr, владеющий следующим узлом N1, а тот, в свою очередь, содержит объект sharedptr, владеющий следующим узлом N2, что создаёт цикл. 2 Чтобы исключить цикл, последний узел N2 должен содержать объект weakptr, указывающий на N0, а не объект sharedptr. 2