#include #include void foo(std::shared_ptr p) { (*p)++; } void create() { std::shared_ptr p = std::make_shared(42); foo(p); // p is still valid std::cout << *p << std::endl; } // when leaving this scope, p will be destroyed (deleted)