#include <iostream>
#include <memory>
using namespace std;

class A
{
public:
	A(int i) : m_i(i) {}
	int geti() { return m_i; }

private:
	int m_i;
};

int main() {
	auto a = std::make_shared<A>(123);
	auto b = a;
	std::cout << a->geti() << std::endl;
	std::cout << b->geti() << std::endl;
	b = nullptr; //use b.reset(); instead
	std::cout << a->geti() << std::endl; // This still works
	//std::cout << b->geti() << std::endl; // This will crash
	return 0;
}