shared_ptr管理其它资源

我们知道shared_ptr是C++11的新标准,可以自动回收动态内存。同时它也可以管理其它资源。

比如网络编程里的连接

shared_ptr语法如下:

        shared_ptr<T> p(q, d)

p接管了内置指针q所指对象的所有权。q必须保证能强制转换为T*类型。

p将调用回调函数d来代替delete回收资源。

struct destination
{
    string ip;
    int port;
    destination(string _ip, int _port): ip(_ip), port(_port){};
};

struct connection
{
    string ip;
    int port;
    connection(string _ip, int _port): ip(_ip), port(_port){};
};

connection connect(destination *d)
{
    shared_ptr<connection> pConn(new connection(d->ip, d->port));
    cout << "creating connection(" << pConn.use_count() << ")" << endl;
    return *pConn;
}

connection disconnect(connection& p)
{
    cout << "connection close(" << p.ip << ":" << p.port << ")" << endl;
}

void deleter(connection* p)
{
    disconnect(*p);
}

void f(destination &d)
{
    connection c = connect(&d);
    //shared_ptr<connection> p(&c, deleter);
    shared_ptr<connection> p(&c, [](connection* p)
                             {disconnect(*p);});
    cout << "Resource has been reaped\n";
}

int main()
{
    destination des("202.201.13.12", 8888);
    f(des);
}

如上所示,当f退出时,p被销毁,connection会被正确关闭。

程序打印结果:

creating connection(1)

Resource has been reaped

connection close(202.201.13.12:8888)

时间: 2024-08-29 19:00:26

shared_ptr管理其它资源的相关文章

Orchard官方文档翻译(九) 新增并管理媒体资源

原文地址:http://docs.orchardproject.net/Documentation/Adding-and-managing-media-content 想要查看文档目录请用力点击这里 最近想要学习了解orchard,但却没有找到相关的中文文档,只有英文文档.于是决定自行翻译,以便日后方便翻阅. 转载请注明原作者与出处. 本人英文水平有限,错误之处欢迎指出以便修正 新增并管理媒体资源 当你通过Orchard中的富文本编辑器上传图片的时 (或者使用XML-RPC客户端,例如Windo

VS2010如何使用Visual Studio Online在线服务管理团队资源(在线TFS)

前言 Visual Studio Online,也就是以前的Team Foundation Service,从名字可以看出这是一个团队资源管理服务.在微软的云基础架构中运行,无需安装或配置任何服务器,使用既有的IDE(如 Visual Studio.Eclipse 或 Xcode)都可以连接上云服务,管理你的团队资源. 本文主要介绍如何使用Visual Studio S2010连接到Visual Studio Online服务,管理我们的团队资源. 准备工作 (1)安装Visual Studio

用 cgroups 管理 cpu 资源

这回说说怎样通过 cgroups 来管理 cpu 资源.先说控制进程的 cpu 使用.在一个机器上运行多个可能消耗大量资源的程序时,我们不希望出现某个程序占据了所有的资源,导致其他程序无法正常运行,或者造成系统假死无法维护.这时候用 cgroups 就可以很好地控制进程的资源占用.这里单说 cpu 资源. cgroups 里,可以用 cpu.cfs_period_us 和 cpu.cfs_quota_us 来限制该组中的所有进程在单位时间里可以使用的 cpu 时间.这里的 cfs 是完全公平调度

华为云学院干货:对象存储服务:便捷管理存储资源

华为云学院干货:对象存储服务:便捷管理存储资源随着数据规模不断增加,收集和存储大型数据集对于任何规模的企业都让人生畏,而且访问组织和分析非结构化数据给企业制造了大量新的挑战.华为云对象存储服务是基于对象的海量存储服务,能为您提供高可靠高性能高安全的数据存储能力.OBS服务基于策略(时间.名称.标签.版本)配置,实现数据在标准存储低频访问存储和归档存储中按需流动,标准存储持久性99.999999999%.无最低存储时间,毫秒级时延.低频访问存储:持久性99.999999999%,30天最低存储时间

巧用命令行工具UCloud CLI,轻量操作API管理云资源

截止目前,UCloud已提供Python/Java/Golang等不同语言的API SDK.为进一步降低用户的运维人力投入,又推出了基于Golang SDK的命令行工具CLI(Command Line Interface),提供轻量化的API命令行调用方式,并在GitHub开源(https://github.com/ucloud/ucloud-cli).CLI的命令行交互方式更符合研发运维的操作习惯,并且一些典型使用场景通过CLI也更容易代码化的沉淀和维护. 下面是一些用户遇到的实际场景, 用C

为跨云管理而生:行云管家助力企业高效管理云资源

随着云成为越来越多企业不可或缺的IT基础设施,为了满足不同的业务需求,许多企业存在多云并存的局面.而多云带来的问题也显而易见,包括多种云平台难以统一管理,资源运维效率大幅降低,企业成本居高不下等. 在这样的环境之下,要想让企业高效管理云计算资源,实现易上云.用好云.管好云的目标,一套运维简单.可一站式管理的跨云管理解决方案就显得尤为重要,由此,行云管家云管平台应运而生. 作为针对跨云管理量身打造的一站式解决方案,行云管家为企业提供了以下功能: 1.多云纳管.混合式管理 支持业界主流的公有云厂商和

Centos常用的进程管理和资源查看工具

一.pstree pstree命令以树状图的方式展现进程之间的派生关系 -a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示:  -c:不使用精简标示法:  -G:使用VT100终端机的列绘图字符:  -h:列出树状图时,特别标明现在执行的程序:  -H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序:  -l:采用长列格式显示树状图:  -n:用程序识别码排序.预设是以程序名称来排序:  -p:显示程序识别码:  -u:显示用户名称: 

Azure RBAC管理ASM资源

上一篇文章介绍了Azure基于ARM的RBAC,给不同的用户分配不同的权限. 但目前在国内使用的大部分用户还是以ASM的资源为主.比如:VM.Storage.Network.WebAPP.SQL Azure等等. 如果客户希望对这些资源给不同用户授予不同的权限,基于ARM的RBAC是否可以实现呢? 基于ARM的RBAC是可以对ASM的资源进行授权管理的. 本文将以VM为例子,介绍如何针对ASM中的资源进行授权的配置和管理. 1 建ASM的虚拟机 通过老portal管理界面:http://mana

ESXi主机管理内存资源的方式

因为内存通常是最有限的资源,ESXi采用内存过量配置(Memory overcommitment,即配置后的虚拟机内存可能超过物理内存(RAM))对内存进行管理.使用内存过量配置时,ESXi必须使用技术从一个或多个VM中回收内存,这些技术被称为:透明页面共享(Transparent Page Sharing,TPS).气球(ballooning).交换(swap)和内存压缩(Memory compression). 1.  透明页面共享 ESXi主机运行相同操作系统的VM时,保存一个可能相同的内