Я думаю, что мой вопрос похож на shared_ptr and weak_ptr differences, но мне интересно посмотреть, как они работают вместе, а не список различий.shared_ptr, weak_ptr и круговые зависимости
страница Википедии о shared_ptr and weak_ptr состоянии а weak_pointer
может быть использована для решения проблемы круговой зависимости, и это дает пример:
std::shared_ptr<int> p1(new int(5));
std::weak_ptr<int> wp1 = p1; //p1 owns the memory.
{
std::shared_ptr<int> p2 = wp1.lock(); //Now p1 and p2 own the memory.
if(p2) //Always check to see if the memory still exists
{
//Do something with p2
}
} //p2 is destroyed. Memory is owned by p1.
p1.reset(); //Memory is deleted.
std::shared_ptr<int> p3 = wp1.lock(); //Memory is gone, so we get an empty shared_ptr.
if(p3)
{
//Will not execute this.
}
Но я не вижу циклическую зависимость, так что я не понимаю как weak_pointer
решает проблему.
я ожидал бы увидеть некоторый объект a
указывает на объект b
и b
каким-то образом указывает обратно на a
(с weak_ptr
подкладками между одной из направленных ребер графа, чтобы разорвать цепь).
Является ли пример хорошим, и я плохо думаю? Или есть лучший пример проблемы и решения?
«_state weak_pointer можно использовать для решения проблемы с циклической зависимостью», и оба они совершенно ошибочны; слабые ссылки имеют мало пользы, а круговая зависимость не одна – curiousguy