class Demo : public std::enable_shared_from_this<Demo> {
public:
std::string key;
std::string value;
};
std::shared_ptr<Demo> A = std::shared_ptr<Demo>(new Demo());
int count1 = A.use_count();
std::shared_ptr<Demo> B = A;
int count2 = A.use_count();
int count3 = B.use_count();
std::weak_ptr<Demo> C = A;
int count4 = A.use_count();
int count5 = B.use_count();
int count6 = C.use_count();
std::shared_ptr<Demo> D = C.lock();
int count7 = A.use_count();
int count8 = B.use_count();
int count9 = C.use_count();
int count10 = D.use_count();
std::shared_ptr<Demo> E = std::shared_ptr<Demo>(A.get());
int count11 = A.use_count();
int count12 = B.use_count();
int count13 = C.use_count();
int count14 = D.use_count();
int count15 = E.use_count();
std::shared_ptr<Demo> F = A->shared_from_this();
int count16 = A.use_count();
int count17 = B.use_count();
int count18 = C.use_count();
int count19 = D.use_count();
int count20 = E.use_count();
int count21 = F.use_count();
std::weak_ptr<Demo> G = A->shared_from_this();
int count22 = A.use_count();
int count23 = B.use_count();
int count24 = C.use_count();
int count25 = D.use_count();
int count26 = E.use_count();
int count27 = F.use_count();
int count28 = G.use_count();
A = nullptr;
int count29 = A.use_count();
int count30 = B.use_count();
int count31 = C.use_count();
int count32 = D.use_count();
int count33 = E.use_count();
int count34 = F.use_count();
int count35 = G.use_count();