首页
学习
活动
专区
工具
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。这样可以确保在新线程中,当前对象不会被意外删除。

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

相关·内容

DevOps平台中制品库是什么?有什么用处

在DevOps实践中,制品库可以说是至关重要组件。一个可靠制品库在DevOps流程中往往可以帮助企业解决许多安全和版本管控方面的问题。典型软件开发会涉及到开发,构建,测试,部署等环节。...在这个过程中,依赖组件如何确保安全,中间制品如何规范管理,交付物如何准确投产,诸如此类问题往往会成为整个DevOps流转阻碍,我们分阶段来看:一、开发构建阶段因技术所需,此阶段往往会“依赖”大量外部依赖组件...二、存入制品库阶段在构建完之后研发人员往往会将制品存入制品库中进行集中管理,在这个时候会出现以下问题:开发无法对库里制品质量状况了如指掌;运维难以确定本次可发布版本,如果有未经测试版本上了生产环境...三、部署实施阶段最后交付制品,在部署实施时候会有许多要求首先要保证传输介质可靠和安全还要兼顾版本管理,哪个版本是最新? 哪个是临时版本?...sonatypenexus,免费版无高可用,可以满足大部分基础业务场景2)HarborVMware公司开源镜像仓库,支持Docker和Helm仓库3)Jfrog Artifactory一家在美上市以色列公司

1.5K40
  • 浅谈KubeEdgeBus用处

    随着容器技术不断升级和发展,相信大部分涉足容器领域的人都会认可Kubernetes已经成为容器技术中一项不可或缺工具,甚至可以稍作夸张说,是检验容器使用人员技能一项标准,并且现在Docker...如同我们所知一样,在实际环境中,同一个物理节点通常表现为具有输入和输出双重特性,但其根本都是为分解或者恢复数据来服务。KubeEdge服务特性影响,在通讯领域或许表现更加明显。...随着5G时代来临,5G技术影响也会不断进入我们生活。边缘云,由于其具有低延时、高互动、实时性更强、安全性更好、并且支持高带宽而广受电信厂家关注。...当然 Kubernetes为了很好服务于边缘云,也就再次进入了我们视野。...作为华为 Cloud BU 部 PaaS 团队首席架构师——Yulin Sun和Yulin Sun小伙伴,同为华为公司PaaS团队高级软件架构师——Weijin Xu是怎么来处理这些相关问题

    1K10

    面试题100:概述一下MQ用处和缺点是什么

    【采用MQ作用】 1> 可以实现系统解耦 假设有A系统,那么它会产生出业务数据,这个时候,有B系统和C系统时需要A系统产生业务数据。...违反了低耦合设计原则。如果我们引入mq,A系统只需要把产生业务数据发送到MQ即可,下游哪个系统需要这个数据了,就去订阅MQ中消息。...所以,针对不同业务场景,我们就可以采用异步调用方式,提升系统响应速度和用户体验。...2> 提升系统复杂度 系统架构设计一个普遍共识就是,系统中引入东西越多,那么系统复杂度就越高,问题也会越多。...那么A系统成功和消费端失败就是不一致了。所以,当引入MQ时候,我们就需要针对这种情况去做最终一致性处理。可以根据不同步骤成功与否,去做补偿或者业务回滚。

    16030

    数据总线诊断接口事件是什么意思?有什么用处

    以上介绍比较宽泛,下文会为各位消息介绍这一问题:数据总线诊断接口事件是什么意思?请阅读下文。 数据总线诊断接口事件是什么意思?...有什么用处? 数据总线诊断接口事件除了上文介绍一些用处以外,还可以控制原件测试,它会对元件测试环路断开进行启动,并进行最终控制。...除了这些比较笼统功能作用以外,它可以实现对系统各种模式进行监控,例如睡眠模式或者唤醒模式等等。因此它智能化是非常非常高,并且随着技术发展,它智能化程度也越来越高。...如果数据总线诊断接口事件检测到所有总线都有睡眠要求时,那么系统也会根据情况进入睡眠模式。 数据总线诊断接口事件是什么意思?我们在上文中对这一问题进行了回答。...实际上它功能已经趋于完善,但对于用户来说,良好体验是没有尽头,数据总线诊断接口事件也需要不断升级更新。

    1.3K10

    js中(function(){})()写法用处

    以前看到老师写js单例模式时疑惑为什么要这么写 var singleton = (function () { var privateVariable; function privateFunction...function XXX(){}1 2、一种是函数表达式 函数表达式我们经常使用,而函数表达式中function则不会出现函数提升。而是JS解释器逐行解释,到了这一句才会解释。...fn1(); function fn1(){}//可以正常调用 fn2(); var fn2 = function(){}//无法调用 OK,下面进入正题,对函数表达式加上(),是可以直接调用 但是如果是对声明式后部加上...var fn2 = function(){}();//对,就是这样 function fn1(){}();//{}会被忽略 而平常function(){}则是一种声明式,如果加上()括号后,则会被编译器认为是函数表达式

    3.5K00

    Java注解用处和使用

    这是最常见,也是java 最早提供注解。常用有@see @param @return 等;在编译时进行格式检查。...现在框架基本都使用了这种配置来减少配置文件数量;在反射 Class, Method, Field 等函数中,有许多于 Annotation 相关接口。...@SuppressWarnings - 指示编译器去忽略注解中声明警告。  元注解是java API提供,是用于修饰注解注解,通常用在注解定义上。...@Target 用于指明被修饰注解最终可以作用目标是谁,也就是指明,你注解到底是用来修饰方法?修饰类?还是用来修饰字段属性。...调用getBeansOfType方法可动态加载,获得指定类型所有Bean对象。该方法返回一个Map类型实例,Map中key为Bean名,key对应内容为Bean实例。

    87020

    C#泛型用处

    泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活复用。 C#泛型赋予了代码更强类型安全,更好复用,更高效率,更清晰约束。...C#泛型能力由CLR在运行时支持,区别于C++编译时模板机制,和java编译时“搽拭法”。这使得泛型能力可以在各个支持CLR语言之间进行无缝互操作。...C#泛型几个特点 如果实例化泛型类型参数相同,那么JIT编译器会重复使用该类型,因此C#动态泛型能力避免了C++静态模板可能导致代码膨胀问题。...在实例化类时,根据用户指定数据类型代替T并由即时编译器(JIT)生成本地代码,这个本地代码中已经使用了实际数据类型,等同于用实际类型写类,所以不同封闭类本地代码是不一样。...按照这个原理,我们可以这样认为:泛型类不同封闭类是分别不同数据类型。 这样泛型不仅更加灵活,也同时将代码简便和提高到一个层次!不用再为具体不同重载方法写具体代码了!

    1.2K10

    GPU服务器用处是什么?跟普通服务器有什么区别?

    GPU服务器,简单来说,GPU服务器是基于GPU应用于视频编解码、深度学习、科学计算等多种场景快速、稳定、弹性计算服务,我们提供和标准云服务器一致管理方式。...结合云服务器 CVM提供计算服务、对象存储 COS提供云存储服务、云数据库MySQL提供在线数据库服务、云监控和大禹提供安全监控服务,图片、视频编解码,可以采用GPU服务器进行渲染,利用 GPU...服务器CPU指令一般是采用RISC(精简指令集)。这种设计好处就是针对性更强,可以根据不同需求进行专门优化,能效更高。...因为CPU性能主要靠主板和内存才能完全发挥出来,而由于先天性设计特点,很多家用电脑主板是不适合服务器CPU使用,即使可以用,很多时候也无法保证发挥出其性能优势。...但是在家用领域,独显则是高清游戏必不可少环节。所以说家用CPU设计更符合普通PC电脑特点,而服务器CPU有着其自身使命与优势。

    3.6K30

    C++中用处

    目录 1.引用基本用法 1.1 引用实质 1.2 引用用法  2.函数中引用 3.引用本质 4.指针引用 5.常量引用 ---- 1.引用基本用法 引用是C++对C重要扩充。...1.1 引用实质 原类型 &别名 = 旧名 1.2 引用用法 注意事项: 引用一旦初始化,不能更改引用指向 引用定义时必须初始化 不能引用NULL 引用可以引用任意类型包括数组...引用可以作为函数形参 ,不能返回局部变量引用 在C语言中我们记得我们可以用指针解决函数不能交换值问题。...; //return a;//err 不能返回局部变量引用 return b;//可以返回静态变量引用 } 3.引用本质 引用本质是一个指针常量 type &b = a; 编译器底层这么实现...如果想改变p内容,函数传递时候按照指针方法传是地址,如下:  get_mem(&p); 如果你想用引用方法直接传就行 void test03() {   int *p = NULL;

    43430

    cmake:EXCLUDE_FROM_ALL用处

    https://blog.csdn.net/10km/article/details/51759194 cmake add_library,add_executable,add_subdirectory...这个参数作用根据cmake官网解释就是如果某个target或subdirectory被设置为EXCLUDE_FROM_ALL属性,那么这个target(或这个subdirectory中所有target...)就会被排除在all target列表之外,这样,当执行默认make(或nmake)时,这个target(或这个subdirectory中所有target)就不会被编译。...@cmake.org 在一个项目中不可避免会有一些测试代码,这些测试代码,我们并不一定需要每次都编译,尤其是编译正式版本时候,这些测试代码是不会加入release版本。...为了加快编译速度,可以将这些测试用target或不会加入releasetarget 加上EXCLUDE_FROM_ALL属性就不需要每次编译它了。

    4K20

    有用但用处不多html属性

    前言 html属性,瀚若星河,有些是平时经常用到,有些是平时不常用,还有一些基本用不到。 今天就总结一般不怎么用,但是有用,用处又不多属性。...watchPosition 该方法用于监听地理信息变化,当用户设备地理位置发生改变时候自动被调用。...小结 对Geolocation研究因为无法实操而告一段落。之前页面嵌入地图需求,直接使用百度地图。 目前因为业务开发中,没有地图开发需求,所以暂时不做深入研究。...它相对顺序按照tabindex 数值递增而滞后。如果多个元素拥有相同 tabindex,它们相对顺序由他们在当前 DOM 中顺序决定。...可以把tabindex 值为正值元素,tabindex值数值大放在数值小后面。因为相对顺序按照tabindex 数值递增而滞后

    1.1K50

    webpack 中 hash 值有何用处

    此处对添加 hash 资源设置长期强缓存,可大幅度提高该网站 HTTP 缓存能力,从而大幅度提高网站二次加载性能。 Q:你知道如何配置强缓存,并验证生效吗?...可参考 Cache-Control: public,max-age=31536000,immutable 「而当源文件内容发生变更时,资源 hash 发生变化,生成新可永久缓存资源地址。」...{hash}.js` } } 思考一下,可以将我们项目的版本号注入我们文件名吗?...不可以,因为每次版本号改变,这将「导致所有缓存都失效」,而每次版本升级时,并不一定所有资源内容都会进行变更。 2. hash 是如何生成?...对于 hash 算法一部分可参考 NormalModule2 hash 函数。

    1.2K90

    【大数据学习】了解关于Python用处

    Python是一门脚本语言,因为能将其他各种编程语言写模块粘接在一起,也被称作胶水语言。强大包容性、强悍功能和应用广泛性使其受到越来越多关注。...一起来了解Python用处 1、传说中WEB开发 在国内,豆瓣一开始就使用Python作为web开发基础语言,知乎整个架构也是基于Python语言,这使得web开发这块在国内发展很不错。...Python中有各类Web框架,无论是简单而可以自由搭配微框架还是全功能大型MVC框架都一应俱全,这在需要敏捷开发Web项目中也是十分具有优势。...3、人工智能(AI)与机器学习 人工智能是现在非常火一个方向,AI热潮让Python语言未来充满了无限潜力。现在释放出来几个非常有影响力AI框架,大多是Python实现,为什么呢?...Python简单易用特性加上QT优雅,可以很轻松开发界面复杂桌面程序,并且能轻松实现跨平台特性。

    1.8K40
    领券