Modern C++ std::unique_ptr的实现原理

本文探讨了Modern C++中std::unique_ptr的实现原理,指出其本质是std::tuple,用于管理对象并搭配不同的析构器。unique_ptr针对数组进行了模板偏特化,并介绍了其内存占用情况:默认deleter时为8字节,用户自定义deleter时为16字节。文中提供了一个GDB调试示例以验证这些概念。
摘要由CSDN通过智能技术生成


unique_ptr是一个非常简单的类,没有计数没有原子操作,非常类似纯指针。

它的类定义也非常简单:
在这里插入图片描述
它针对数组做了模板偏特化,因为它得支持数组操作比如Arr[i]。
unique_ptr的本质就是std::tuple, 里面第一项为指针指向管理对象,第二项为deleter:是一个函数指针或仿函数,用来删除管理对象。
故unique_ptr的size大小有两种可能:

  1. 8:默认deleter = default_delete() default_delete是个空struct。
  2. 16:用户指定了自己的deleter。

最后留下一个小小的例子供大家去验证上面的结论。

#include <iostream>
#include <memory>

class MyClass {
   
public:
    MyClass(int value) : data(value) {
   
        std::cout << "Constructor called. Value: " << data << std::endl;
    }

    void printData(
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深山老宅

鸡蛋不错的话,要不要激励下母鸡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值