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

5G NR PDCCH实战解析:从DCI格式到CORESET配置的完整指南

本文深入解析5G NR PDCCH的实战配置,涵盖DCI格式选择、CORESET配置及Search Space优化等关键内容。基于3GPP R16标准,提供现网部署中的典型问题解决方案,如覆盖边缘失步、多用户调度冲突等,帮助提升控制信令传输效率。特别针对5G NR PDCCH的灵活资源分配和自适应编码机制进行详细探讨。

weixin_29231263的博客 496

【C语言项目合集】这十个入门必备练手项目,让C语言对你来说不再难学!

适合刚入门C语言的编程学习小白的十个练手项目,每个都很经典且实用,让你学完C语言不再迷茫!

kxtxdy的博客 3万+

shared_from_this

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

iihtd的专栏 353

退火朗之万动力学采样

退火朗之万动力学采样(Simulated Annealing Langevin Dynamics Sampling)结合了退火技术和朗之万动力学,是一种用于分子模拟和统计物理中的计算方法。这种方法可以帮助系统从局部最小值中逃逸,以找到全局最小值或进行有效的配置空间探索。

weixin_39699362的博客 1947

AI for Science:GNN预测分子性质全流程详解与工业实践

从分子表示到工业落地,一文掌握图神经网络在药物研发与材料设计中的核心实战近年来,的浪潮正深刻变革着传统科研范式。在药物研发与材料设计领域,作为核心环节,已从传统的实验试错转向基于图神经网络(GNN)的智能计算。本文将深入解析GNN预测分子性质的,涵盖数据准备、模型设计、训练优化到工业部署,并揭秘前沿技术与实战案例。

datacanvas2426的博客 1674

车载以太网测试-3【Wireshark介绍】

数据包捕获支持从多种网络接口(如以太网、Wi-Fi、蓝牙等)捕获数据包。可以实时捕获或从文件中读取已捕获的数据包。协议解析支持解析数百种网络协议(如 TCP/IP、HTTP、DNS、FTP 等)。能够深入解析协议头部和负载,帮助用户理解网络通信的细节。过滤功能提供强大的显示过滤器和捕获过滤器,帮助用户快速定位和分析感兴趣的数据包。支持基于协议、IP地址、端口号等多种条件的过滤。统计和分析提供多种统计工具,如流量图、会话统计、协议分层统计等。

车载网络测试工程师的博客 1982

C++11 智能指针之shared_from_this

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

轻口味的专栏 1031

构网型逆变器下垂控制与电流限幅策略研究:理论、仿真与代码实现

随着分布式发电和微电网技术的快速发展,构网型(Grid-Forming, GFM)逆变器因其能够自主建立电压和频率参考、支撑弱电网及孤岛运行而受到广泛关注。本文提出并实现了一种基于下垂控制的构网型逆变器控制策略,将逆变器等效为受控电压源,通过L型滤波器接入配电网。在公共耦合点(PCC)处实时测量三相电压和电流,计算有功和无功功率,进而采用P-w和Q-V下垂控制生成内部频率和电压幅值,合成三相参考电压。针对故障情况下过电流问题,设计了一种自适应电流限幅模块:当电流幅值超过设定上限时,动态降低电压参考系数k_s

huanghm88的专栏 153

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

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

cirol1997的博客 690

大模型——Coze工作流实战:一键生成像素风格视频

本文介绍了如何利用Coze平台工作流生成像素风格心理学短视频的方法。通过创建工作流、设置变量节点、调用大模型生成文案、数据格式化处理、合成音频、生成字幕等步骤,最终实现从输入主题到生成完整视频的自动化流程。文章详细展示了每个节点的具体配置方法,包括提示词编写和数据处理脚本,为读者提供了完整的像素风格视频制作解决方案。

817

改进的U-Net在视网膜血管分割上的应用

为了提高算法在血管边界的分割能力,在编码部分采用全局卷积网络(GCN)和边界细化(BR)替换传统的卷积层;在跳跃连接部分引入改进的位置注意模块(PA)和通道注意模块(CA),目的是增加血管与背景之间的对比度,使网络更好地将血管与背景分割开;此外,为了提高网络的性能,在编码部分的最后一层使用密集卷积网络解决网络过拟合问题,同时为了在一定程度上解决梯度爆炸、梯度消失的问题,在解码部分的每一层使用卷积长短记忆网络提升网络获取特征信息的能力。替换传统的卷积操作来解决血管边界非血管像素误分为血管的问题。

weixin_70923796的博客 782

【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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

enable_shared_from_this实现原理

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

weixin_43599089的博客 2512

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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、付费专栏及课程。

余额充值