#include <iostream>
#include <memory>
using namespace std;
struct MyDeleter {
void operator()(int* p) {
std::cout << "Deleting int with MyDeleter" << std::endl;
}
};
class A {
public:
std::shared_ptr<int> a_;
A() {
a_ = std::make_shared<int>(23);
}
std::shared_ptr<int> GetPtr() {
return a_;
}
void GetCount() {
cout << "====== a: " << *a_.get() << ", use: " << a_.use_count() << endl;
}
void Update() {
std::shared_ptr<int> cc = std::make_shared<int>(44);
a_ = cc;
GetCount();
}
};
int main() {
cout << "---------Init aa after----------------" << endl;
A aa;
aa.GetCount();
cout << "---------Init bb after----------------" << endl;
std::shared_ptr<int> bb = aa.GetPtr();
aa.GetCount();
cout << "====== b: " << *bb.get() << ", use: " << bb.use_count() << endl;
cout << "---------update aa after----------------" << endl;
aa.Update();
aa.GetCount();
cout << "====== b: " << *bb.get() << ", use: " << bb.use_count() << endl;
return 0;
}