#include #include struct Bundle { static int alive; int value; Bundle() : value(42) { ++alive; } ~Bundle() { --alive; } }; int Bundle::alive = 0; int main() { auto owner = std::make_shared(); std::shared_ptr field(owner, &owner->value); assert(owner.use_count() == 2); owner.reset(); assert(Bundle::alive == 1); assert(*field == 42); field.reset(); assert(Bundle::alive == 0); }