I understand below:
1. weak_ptr created as a copy of shared_ptr.
2. weak_ptr provides the access to the referenced object that is owned by one or more shared_ptr instances but it will not take part in reference count.
3. It must be converted to shared_ptr in order to use/access underlying object.
e.g.
1 2 3 4 5 6 7 8 9 10 11
shared_ptr<Adjacent> sp1(new Adjacent());
weak_ptr<Adjacent> wp1 = sp1;
// To access the object via weak_ptr
shared_ptr<Adjacent> sp2 = wp1.lock();
if(!wp1.expired())
{
// access weak ptr
sp2->fun1();
}