shared_ptr 自定义 deleter 删除器

发布时间 2023-04-05 15:12:56作者: Zijian/TENG
class Bar {
   public:
    Bar(int ii) : i(ii) { cout << "Bar(" << i << ")" << endl; }
    ~Bar() { cout << "~Bar(" << i << ")" << endl; }
    int i;
};

void deleter1(Bar* b) { cout << "deleter1 (" << b->i << ")" << endl; }

int main() {
    shared_ptr<Bar> sp1(new Bar(1), deleter1);
    auto sp2 = sp1;  // OK
    // shared_ptr<Bar> sp2(sp1, deleter1);  // NOK
    cout << endl;
    sp1.reset(new Bar(2));

    // 先析构 sp2--> Bar1 ,再析构 sp1 --> Bar2
}

运行结果

Bar(1)

Bar(2)
deleter1 (1)
~Bar(2)