According to boost:
To access the object, a weak_ptr can be converted to a shared_ptr using the shared_ptr constructor or the member function lock.
shared_ptr<T> lock() const;
//Returns: expired()? shared_ptr<T>(): shared_ptr<T>(*this).
No, that is actually the point of shared_ptr - the copied instance will point to the same underlying data and increment the reference count for both instances.
That means that
shared_ptr<T>(*this) will create an additional
shared_ptr instance pointing to the same data and will increment the reference count for both
this and the new instance.
It is actually more complicated in the real code, as the original
shared_ptr data is accessed through the
weak_ptr instance, but effectively the original
shared_ptr data is shared at the end (with the shared reference count increased in all existing copies of the particular