编辑代码

#include <iostream>
#include <memory>

using namespace std;


struct MyDeleter {
    void operator()(int* p) {
        std::cout << "Deleting int with MyDeleter" << std::endl;
        //delete p;
    }
};

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;
    // 初始化 bb
    std::shared_ptr<int> bb = aa.GetPtr();
    aa.GetCount();
    cout << "======  b: " << *bb.get() << ",  use: " << bb.use_count() << endl;
    
    cout << "---------update aa after----------------" << endl;
    // 更新aa
    aa.Update();
    aa.GetCount();
    cout << "======  b: " << *bb.get() << ",  use: " << bb.use_count() << endl;


    return 0;
}