首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

`enable_shared_from_this`的用处是什么?

enable_shared_from_this是一个C++编程中的辅助模板类,用于实现类似于std::shared_ptr的智能指针功能。它的主要用途是在类的成员函数中创建std::shared_ptr智能指针,指向当前对象。这在实现类似于异步回调函数、多线程任务等场景时非常有用,因为它可以确保当前对象不会在执行过程中被意外删除。

使用enable_shared_from_this的步骤如下:

  1. 让需要使用std::shared_ptr管理的类继承自std::enable_shared_from_this<YourClass>
  2. 在类的成员函数中,使用std::shared_from_this()函数获取当前对象的std::shared_ptr

需要注意的是,enable_shared_from_this只能与std::shared_ptr一起使用,不能与std::unique_ptr或裸指针一起使用。

示例代码:

代码语言:cpp
复制
#include<iostream>
#include<memory>
#include<thread>
#include<chrono>

class MyClass : public std::enable_shared_from_this<MyClass> {
public:
    std::shared_ptr<MyClass> getSharedPtr() {
        return shared_from_this();
    }
};

int main() {
    std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>();
    std::thread([ptr]() {
        std::this_thread::sleep_for(std::chrono::seconds(3));
        std::shared_ptr<MyClass> new_ptr = ptr->getSharedPtr();
    }).detach();

    return 0;
}

在这个示例中,MyClass继承自std::enable_shared_from_this<MyClass>,并使用shared_from_this()函数获取当前对象的std::shared_ptr。在main函数中,创建一个MyClass对象的std::shared_ptr,并在一个新线程中使用getSharedPtr()函数获取该对象的std::shared_ptr。这样可以确保在新线程中,当前对象不会被意外删除。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

共1个视频
数据存储与检索
jaydenwen123
本系列教程主要是分享关于“数据存储与检索”知识,主要会涉及b+树(b+ tree)存储引擎、lsm树(lsm tree)存储引擎,涉及boltdb、innodb、buntdb、bitcask、moss、pebble、leveldb源码分析等。本教程会按照理论结合实践来介绍。每一部分会先介绍理论知识:为什么?是什么?怎么做?其次会介绍实际开源项目中如何应用的。每部分会挑几个经典的开源项目来源码分析。
领券