首页
学习
活动
专区
工具
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流转的阻碍,我们分阶段来看:一、开发构建阶段因技术所需,此阶段往往会“依赖”大量外部的依赖组件...二、存入制品库阶段在构建完之后研发人员往往会将制品存入制品库中进行集中管理,在这个时候会出现以下问题:开发无法对库里制品的质量状况了如指掌;运维难以确定本次可发布的版本,如果有未经测试的版本上了生产环境...三、部署实施阶段最后交付的制品,在部署实施的时候会有许多要求首先要保证传输的介质可靠和安全还要兼顾版本的管理,哪个版本是最新的? 哪个是临时版本?...sonatype的nexus,免费版无高可用,可以满足大部分基础业务场景2)HarborVMware公司开源的镜像仓库,支持Docker和Helm仓库3)Jfrog Artifactory一家在美上市的以色列公司

1.7K40
  • 浅谈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的时候,我们就需要针对这种情况去做最终一致性的处理。可以根据不同步骤的成功与否,去做补偿或者业务回滚。

    17330

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

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

    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.6K00

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

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

    3.7K30

    C#泛型的用处

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

    1.3K10

    Java注解的用处和使用

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

    87820

    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或不会加入release的target 加上EXCLUDE_FROM_ALL属性就不需要每次编译它了。

    4.1K20

    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;

    44630

    webpack 中的 hash 值有何用处?

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

    1.2K90

    有用但用处不多的html的属性

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

    1.1K50

    C++ enable_shared_from_this 具体实现

    那么这个 weakptr 的指针是什么时候创建的呢?...enable_shared_from_this 源码实现 我们来扒一扒源码,先来看一下 enable_shared_from_this 模版类的实现,代码虽然不多,但是为了简单清晰,我把涉及不到的方法给移除掉了...对于第二个问题,比较简单,上面我们发现有个兜底的 __enable_weak_this 函数, 调用的就是这个了,内部实现是空的,也就是什么也不做。...类型T, 如果为false,返回空(不是void,而是什么也没有) 那么看下: enable_ifenable_shared_from_this...value 返回 true 的话,也就是说我们的裸指针可以转换为 enable_shared_from_this*>::value, 其实也就是说,我们的裸指针类型是继承自 enable_shared_from_this

    1.1K30

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

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

    1.9K40
    领券