#include #include class Particle { protected: std::string m_name; double m_mass; public: Particle(std::string name, double mass): m_name(name), m_mass(mass) {} const std::string& GetName() const { return m_name; } double GetMass() const { return m_mass; } void SetName(const char* name) { m_name = name; } void SetMass(double mass) { m_mass = mass; } }; //void c() void shared_ptr_try() { // shared_ptrを作成 auto ptr = std::make_shared("Z", 991.2); std::cout << ptr->GetName() << " " << ptr->GetMass() << std::endl; { // ptrとptr2が同じオブジェクトを共有 auto ptr2 = ptr; // ptr2での変更が... ptr2->SetName("W"); ptr2->SetMass(880.4); // ptrでも反映される std::cout << ptr->GetName() << " " << ptr->GetMass() << std::endl; } // ptr2はスコープから外れるが、ptrがあるのでオブジェクトは生存 std::cout << ptr->GetName() << " " << ptr->GetMass() << std::endl; return; } // この時点でptrが所有するオブジェクト(W)が破棄される ~ ======================================================= Processing shared_ptr_try.C... Z 991.2 W 880.4 W 880.4