OK perfect I found the answer: http://www.codesynthesis.com/~boris/blog/2012/04/25/shared-ptr-aliasing-constructor/
The aliasing constructor! (code taken from the link)
struct data {...};
struct object
{
data data_;
};
void f ()
{
shared_ptr<object> o (new object); // use_count == 1
shared_ptr<data> d (o, &o->data_); // use_count == 2
o.reset (); // use_count == 1
// When d goes out of scope, object is deleted.
}