首页
学习
活动
专区
圈层
工具
发布

shared_ptr 和 unique_ptr 深入探秘

class unique_ptr;可以看到,Deleter 的类型是 unique_ptr 类型的一部分。...回到 unique_ptr,现在我们知道 unique_ptr 的报错链路是 unique_ptr->delete->sizoef,也就是 sizeof 才是罪魁祸首。...继续深挖一下,这个问题会出现在 shared_ptr 吗?答案是不会。这又引入了另一个问题,shared_ptr 和 unique_ptr 的封装有什么不同?...shared_ptr 的封装按理说 shared_ptr.reset 的时候需要 delete ptr 就需要 ptr 的类型(错了请指正),而 shared_ptr 的 template type 可以是...总结unique_ptr 只保存了类型指针 ptr 和这个指针的析构方法,调用 delete ptr,就需要ptr的完整类型,为了防止这个问题出现,直接通过 assert sizeof 排除掉了这种风险

86510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《深入理解 C++ 智能指针:unique_ptr、shared_ptr 与 weak_ptr 全解析》

    智能指针的引入极大地简化了资源管理,尤其在 C++11 以后,unique_ptr、shared_ptr 和 weak_ptr 被标准化并广泛应用于现代 C++ 项目中。...二、智能指针概览 智能指针类型 所有权 引用计数 可拷贝性 自动释放 unique_ptr 唯一 否 否 是 shared_ptr 共享 是 是 是 weak_ptr 非拥有 是 是 否 三、unique_ptr...::cout ptr << std::endl; 3.2 转移所有权 cpp复制编辑std::unique_ptr ptr2 = std::move(ptr); 图示(逻辑结构):...scss复制编辑ptr ───► [10] (转移后) ptr (null) ptr2 ───► [10] 3.3 自定义析构函数 cpp复制编辑structFileCloser {...} }; 九、性能比较与推荐使用场景 使用场景 推荐智能指针 独占资源、无共享 unique_ptr 多个对象共享所有权 shared_ptr 弱引用、观察者模式 weak_ptr 原始指针无所有权需求

    1.2K10

    PTR解析记录理解与用途

    今天了解了PTR解析记录才明白是怎么一回事。 ---- 平常解析域名用的最多的应该就是A(AAAA)/CNAME类型了,其他的很少用到,也很少了解到。今天就说一下 我对PTR记录的理解。...百度百科中写到: PTR (Pointer Record),指针记录,是电子邮件系统中的一种数据类型,被互联网标准文件RFC1035所定义。与其相对应的是A记录、地址记录。二者组成邮件交换记录。...所以可以粗糙的理解为, PTR是A记录的反向,可以通过IP地址查到对应的域名记录。而拥有这个权限的是ISP(互联网服务提供商),只有向ISP申请才能实现PTR解析。...在php中,可以使用 gethostbyaddr 函数来进行查询; 在Linux下,可以通过 host 1.1.1.1 直接查询,或者 host -t PTR 1.1.1.1 来查询; 也可以通过 nslookup

    3K30

    X86 Assemble指令--ptr

    Assemble指令中标识大小 在Assemble中通常会看到WORD ptr或者DWORD ptr或者BYTE ptr等关键字,这些关键字主要用来标识指令操作数的大小(或者说长度) WORD ptr...:标识该操作数为1个字 DWORD ptr:标识该操作数为2个字 BYTE ptr:标识该操作数为1个字节 基础知识 1 BYTE = 8 bits 1 WORD = 2 BYTE 1 DWORD...= 2 WORD 举例 and dword ptr [ebp-4], 0 ebp为栈指针的基址指针,总是指向当前方法栈的最底部,当函数返回后,该寄存器中的指针才会返回。...由于只是指出了目的操作数的内存基址,但是没有指出寄存器到底要操作一个BYTE,还是一个WORD,还是DWORD,所以需要加上dword ptr来表示进行与操作的时候,读取从ss:ebp-4的位置到ss:...参考资料 What does "dword ptr" mean? In assembly, what does "PTR" stand for?

    94520

    深入剖析:boost::intrusive_ptr 与 std::shared_ptr 的性能边界和实现哲学

    std::shared_ptr 因其便利性、安全性而广受欢迎,但当我们追求极致性能时,目光往往会投向 boost::intrusive_ptr。...第一部分:性能的本质差异——缓存一致性与原子操作 许多开发者直觉上认为 std::shared_ptr 慢于 boost::intrusive_ptr 是因为前者涉及 原子操作(Atomic Operations...1. std::shared_ptr 的开销结构:分离式控制块 std::shared_ptr 的设计哲学是 非侵入式。这意味着它能够管理任何类型的对象 T,无需 T 本身具备引用计数的能力。...性能瓶颈分析: 当多个线程同时对同一个 shared_ptr 进行复制或销毁操作时(例如,通过不同的 shared_ptr 实例访问同一个对象),它们都需要修改 控制块 中的引用计数。...第二部分:intrusive_ptr 的巧妙机制——参数依赖查找(ADL) boost::intrusive_ptr 的实现方式是 C++ 模板编程中一个非常精妙的范例。

    22810
    领券