#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() { std::cout << "MyClass Constructor" << std::endl; }
~MyClass() { std::cout << "MyClass Destructor" << std::endl; }
void sayHello() const { std::cout << "Hello from MyClass" << std::endl; }
};
int main() {
std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>(); // Create a shared_ptr
{
std::shared_ptr<MyClass> ptr2 = ptr1; // Share ownership with ptr2
ptr2->sayHello(); // Use the object
std::cout << "Reference count: " << ptr1.use_count() << std::endl; // Outputs: 2
}
// ptr2 goes out of scope, reference count decreases
std::cout << "Reference count: " << ptr1.use_count() << std::endl; // Outputs: 1
return 0;
}