#include<iostream>
#include<memory>
#include<thread>
class MyClass {
public:
int value;
std::shared_ptr<int> mem;
MyClass(int a, int b) : value(a)
{
mem.reset(new int(b));
std::cout << mem.use_count() << std::endl;
std::shared_ptr<int> cc = Get();
std::cout << cc.use_count() << std::endl;
}
std::shared_ptr<int> Get()
{
return mem;
}
};
void update(std::shared_ptr<MyClass> ptr) {
std::shared_ptr<MyClass> local_ptr = ptr;
std::shared_ptr<int> aa = local_ptr->Get();
std::cout << aa.use_count() << endl;
}
int main() {
std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>(1,2);
std::shared_ptr<int> bb = ptr->Get();
std::cout << bb.use_count() << std::endl;
std::thread t(update, ptr);
t.join();
std::cout << bb.use_count() << std::endl;
}