shared_from_this

使用场景

C++中,有时候会想在类成员内部获取类的shared_ptr,比如:

  1. 成员函数异步调用某个api,传递当前类指针,为了避免类析构后指针失效,需要传递shared_ptr作为参数,以延长生命周期
A::func1() {
    this->invoke(B::func2, shared_from_this());  // 把shared_ptr A传递给B的func2
}
  1. 在成员函数registerOnFrame()中注册回调函数handleNewFrame()时,事件触发时会调到回调函数,需要保证指针有效
A::registerOnFrame() {
    eventSystem.onFrame([self = shared_from_this()]() {
        self->handleNewFrame();
    });
}

总而言之,shared_from_this()的作用就是:类内部对外暴露shared_ptr,以避免异步调用时指针失效
其他场景,比如类外部,根本不需要此用法。
 

实现原理和注意事项

  • 通过weak_ptr实现,以避免shared_ptr循环引用导致内存泄漏,细节不详
  • shared_from_this()获取的时shared_ptr,这点毋庸置疑
  • 不能在构造函数中调用 shared_from_this(),因为此时 shared_ptr 尚未完成构造,weak_ptr 还未被设置
posted @ 2025-12-25 12:00  moonのsun  阅读(5)  评论(0)    收藏  举报