C++11 shared_from_this学习

C++11中enable_shared_from_this的用法解析 什么是 enable_shared_from_this? 下面摘自 cpp reference 中概述 C++11开始时支持 enable_shared_from_this,它一个模板类,定义在头文件 <memory>,其原型为: template< class T > class enable_shared_from_this; std::enable_shared_from_this 能让其一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 阅读详情

         最近学习网络变成发现一些C++源码库中封装对象时会公有继承enable_shared_from_this;

用一个案例进行说明,案例代码如下:

#include <iostream>
#include <memory>
#include <stdio.h>

using namespace std;

class C : public enable_shared_from_this<C>
{
	public:
		shared_ptr<C> f1(){return shared_from_this();}
		
		C* f2(){ return this;}
};


int main(){
	
	shared_ptr<C> p1(new C);
	printf("p1 count: %d; p1 addr:%x \n", p1.use_count(), p1.get());
	
	// 调用shared_from_this()返回指向自身的shared_ptr。
	shared_ptr<C> p2 = p1->f1();
	printf("p2 count: %d; p2 addr:%x \n", p2.use_count(), p2.get());
	
	// 弱引用不增加共享指针计数
	weak_ptr<C> p4 = p1->f1();
	printf("p4 count: %d; p4 addr:%x \n", p4.use_count(), p4.lock().get());
	
	// 将弱引用提升为共享指针再被引用计数增加
	shared_ptr<C> p5 = p4.lock();
	printf("p5 count: %d; p5 addr:%x \n", p5.use_count(), p5.get());
	
	printf("----------------没有用 shared_from_this()----------------\n");
	// 调用this指针等于重新定义了一个shared_ptr,计数为1。
	shared_ptr<C> p3(p1->f2());
	printf("p3 count: %d; p3 addr:%x \n", p3.use_count(), p3.get());
	
	return 0;
}

        程序执行结果如下:

        由案例代码可知,只有当调用shared_from_this函数返回指向该对象的shared_ptr指针,在外部调用时才会统计总的引用计数。

C++智能指针的enable_shared_from_this和shared_from_this机制 知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达! 目录问题代码代码清单1代码清单2shared_ptr原理分析 如果不熟悉C++带引用计数的智能指针shared_ptr和weak_ptr,请参考我的另一篇介绍智能指针的博客:https://blog.youkuaiyun.com/QIANGWEIYUAN/article/d... 阅读详情

相关推荐

C++ std::enable_shared_from_this 类模板到底有什么用?【 C++11 标准中正式引入】

本文介绍了C++中std::enable_shared_from_this模板的用法,通过HttpServer示例说明其重要性。在异步回调中直接使用this指针可能导致对象提前销毁引发未定义行为,而shared_from_this()通过共享所有权确保对象生命周期延长到异步操作完成。文章分析了其工作原理:shared_from_this()会创建新的shared_ptr副本,增加引用计数,直到回调执行完毕才可能释放对象。该模板是解决异步操作中对象生命周期问题的标准工具,能有效防止悬空指针问题。

qq_35814377的博客 2334

std::shared_from_this()使用方法

其中T是自己类的类型。继承后,自己写的类中就可以调用。管理的情况下被安全地调用。将导致未定义行为(通常是抛出。异常,但实际上这取决于实现)。会与已经存在的其他指向该对象的。来获取一个指向自身的。只能在对象已经被一个。时,自己书写的类要继承。使用时需要注意的是,

weixin_43212200的博客 777

(C++) 内类生成智能指针shared_from_this介绍

unique_ptrshared_ptrweak_ptr都是内存管理中的非常重要的一部分动态内存管理 - cppreference.com。其中shared_ptr在实际应用中具有非常广泛的应用。而拷贝操作也是非常常见和重要的操作。在类外可以直接使用默认的拷贝构造和拷贝赋值,而类内呢?显然这两种默认的拷贝操作均不适用。本文就是讲解使用来处理该问题。

cuber-lotus的博客 1663

C++11里shared_from_this()的使用及注意事项

C++11里shared_from_this()的使用及注意事项

本人的技术和文笔有限,正在努力成长中,请各位朋友多多指正与包涵! 2059

保姆级教程:如何用Le2i Fall Detection Dataset训练你的跌倒检测模型(附数据集下载)

本文提供了一份详细的实战指南,教你如何使用Le2i Fall Detection Dataset训练跌倒检测模型。内容涵盖数据集的深度解析、预处理与工程化管道搭建、模型选择与训练策略,以及评估优化与部署考量,旨在帮助开发者从零构建高精度、可应用的跌倒检测系统。

assembly8low的博客 1286

shared_from_this

什么时候需要用到shared_from_this呢?当我们的函数需要能够返回到函数的智能指针的时候,因为如果是返回的this裸指针,那么这个对象的生命周期谁来保证呢?还有就是,如果我们用share_ptr来管理对象生命周期,那么整个代码中都应该是用share_ptr来管理。 这里只是讲一下shared_from_this的用法 算了,发现自己都懒得讲了,可以参考下面的提法,

iihtd的专栏 353

如何对TBSS的结果进行统计学的分析,已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析??

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1438

爆肝5万字❤️Open3D 点云数据处理基础(Python版)

本文为Open3D 点云数据处理基础教程(Python版),小白也能轻松上手!还等什么呢,学起来!

孙悟空 13万+

SAP 批量修改 工艺路线 和 BOM

1、在运维的过程中经常会遇到用户需要批量更改组件,或者是批量更改数量,还是组件里面的一些标识,当处理这些批量数据处理的业务时,BOM的批量更改一个想到的就是CS20,但是CS20当BOM需要替换的时候就不是很适用。当前工作区域:选择 SAP_ITEM 对BOM行项目进行变更,工艺路线也是可以批量更改的,根据实际的业务进行选择,我这里选择的就是BOM的组件变更。5、本博客将使用新的一种方式进行BOM的批量变更,标准的事务代码:CEWB对BOM进行批量更改。3、使用LSMW的方式进行BOM的批量更改。

我小时候很黑的博客 4092

C++11 智能指针之shared_from_this

总结一下shared_from_this()使用场景。shared_from_this()实现原理。智能指针对象和一般的指针用法几乎完全相同。

轻口味的专栏 1031

ubuntu-25.04-desktop-amd64 工具VMware-tools 正确安装方法

摘要:Ubuntu 25.04虚拟机安装VMware Tools后无法实现主机与虚拟机间的文件复制粘贴和拖拽功能,问题可能源于工具兼容性。建议优先安装open-vm-tools套件(含open-vm-tools-desktop),而非官方VMware Tools。具体方案:通过终端执行安装命令后重启系统。该方法已实测有效解决该兼容性问题。(149字)

安徽锐锋科技-沐雨潇竹 672

面试之快速学习C++11-完美转发,nullptr, shared_ptr,unique_ptr,weak_ptr,shared_from_this

上述 T 为int &。那么整个为 int & &&-> int &回到完美转发,假设现在我需要转发a,那么注意一下实现完美转发需要这样写forward大致实现原理注意其实std::move底层实现也是 static_cast。

cirol1997的博客 690

AUTOSAR NvM 实车故障深度剖析:车载存储问题快速定位与工程解决方案

软件配置与代码逻辑无问题时,排查底层驱动与ECU硬件,步骤如下:底层驱动排查:排查Fls/Eep驱动配置,是否适配目标MCU(如TC397、S32K),编程/擦除/读取时序是否合理;检查Fls/Eep驱动错误处理逻辑,是否未处理Flash编程失败、读取错误等异常;验证Flash高速编程模式是否启用,是否能提升写入/读取速度;排查MemIf层配置,是否正确对接NvM与Fls/Eep驱动,是否存在调度延迟。

getusushu的博客 78

Open3D 可视化(1)——简单可视化【2026最新版】

简单可视化,博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 5684

【C++ 17 新特性 weak_from_this】C++ 获取自身指针对象std::enable_shared_from_this下的shared_from_this和weak_from_this

`shared_from_this` 是 C++11 中引入的一个功能,它是在 `std::enable_shared_from_this` 类的帮助下实现的。当你有一个类,该类的对象通常通过 `std::shared_ptr` 管理时,`shared_from_this` 可以安全地生成这些对象的更多 `std::shared_ptr` 实例。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1790

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++之shared_from_this()

参考:https://blog.youkuaiyun.com/zk3326312/article/details/79108690 c++11中的shared_from_this()来源于boost中的enable_shared_form_this类和shared_from_this()函数,功能为返回一个当前类的std::share_ptr,使用方法如下: #include<memor...

ZGT的博客 3050

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

enable_shared_from_this实现原理

如果需要使用this指针构造,T 必须public 继承,且 T 的构造需要通过,否则毫无意义。也就是说如果你不打算用智能指针管理你的实例,你压根不需要考虑这些。类成员shared_ptr构造函数->->

weixin_43599089的博客 2512

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

c++11之enable_shared_from_this

enable_shared_from_this的主要作用是用来安全地获取指向这个类(即继承enable_shared_from_this模板的类)的指针,有人会说,c++类不是都有默认的this用来指向这个类吗,何必还要再采用enable_shared_from_this的方法呢,大家先从一个例子来看用this指针会存在的问题: #include<memory> #include&...

songlipeng的专栏 897

c++11中的shared_from_this()

c++11中的shared_from_this()    c++11中的shared_from_this()来源于boost中的enable_shared_form_this类和shared_from_this()函数,功能为返回一个当前类的std::share_ptr,使用方法如下:     #include<memory>class Test: public std::enable_share

曾柯的知识笔记 4万+

enable_shared_from_this使用介绍

智能指针之enable_shared_from_this

Erice_s的博客 3915

C++11:再谈shared_ptr,以及shared_ptr参数传递以及构造细节

shared_ptr在boost库中已经有多年了,C++11又为其正名,把他引入了STL库,放到了std的下面,可见其颇有用武之地;但是shared_ptr是万能的吗?有没有什么样的问题呢?本文并不说明shared_ptr的设计原理,也不是为了说明如何使用,只说一下在使用过程中的几点注意事项。 参数值传递 代码如下: #include <iostream> #inclu...

zzhongcy的专栏 2万+

c++11 智能指针-辅助类 (std::enable_shared_from_this)

std::enable_shared_from_this 能让其一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例(假设名为 pt1, pt2, ... ) ,它们与 pt 共享对象 t 的所有权。

qq_40788199的博客 2040

c++11 std::enable_shared_from_this

上面程序可以看出以下几个方面。

u011743621的博客 708

C++11新特性之十:enable_shared_from_this

enable_shared_from_this是一个模板类,定义于头文件&lt;memory&gt;,其原型为:template&lt; class T &gt; class enable_shared_from_this;       std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管...

草上爬的博客 10万+
上一篇: docker搭建redis集群
下一篇: Linux java jni调用C++封装动态库
码农诗人
博客等级 码龄11年 986粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值