Share Members of a Managed Object

Learn to share members of a managed object.

The std::shared_ptr class provides an aliasing constructor to share a pointer managed by another unrelated pointer:

shared_ptr( shared_ptr<Y>&& ref, element_type* ptr ) noexcept;

This returns an aliased shared_ptr object that uses the resources of ref but returns a pointer to ptr. The use_count is shared with ref. The deleter is shared with ref. But get() returns ptr. This allows us to share a member of a managed object without sharing the entire object, and without allowing the entire object to be deleted while we're still using the member.

How to do it

In this recipe, we create a managed object and share members of that object:

struct animal {
string name{};
string sound{};
animal(const string& n, const string& a): name{n}, sound{a} {
cout << format("ctor: {}\n", name);
}
~animal() {
cout << format("dtor: {}\n", name);
}
};

This class has two members, string types for name and ...

Get hands-on with 1400+ tech skills courses.