LunarBlog

导航

C++ 当std::bind和std::shared_ptr组合时的坑

经过测试,bind一个成员函数时,使用智能指针作为参数,会增加改对象智能指针的引用计数

#include <iostream>
#include <memory>
#include <functional>

using namespace std;

class Test{
public:
    using ptr = shared_ptr<Test>;
public:
    Test():m_data(10){
        cout << "Test::Test()" << endl;
    }
    void func(){
        cout << m_data << endl;
    }
    ~Test(){
        cout << "Test::~Test()" << endl;
    }
private:
    int m_data;
};

int main(){
    Test::ptr t;
    function<void(void)> f;
    t.reset(new Test);

    cout << t.use_count() << endl;
    f = bind((void(Test::*)(void))&Test::func, t);
    // f = bind((void(Test::*)(void))&Test::func, t.get()); //结果是1
    cout << t.use_count() << endl;
    return 0;
}

在这里插入图片描述

posted on 2023-08-01 12:06  LunarCod  阅读(53)  评论(0)    收藏  举报  来源