当前位置: 首页 > news >正文

unique_ptr的大小探讨

unique_ptr大小和删除器有很大关系,具体区别看如下代码的分析。不要让unique_ptr占用的空间太大,否则不会达到裸指针同样的效果。

#include <iostream>
#include <memory>
using namespace std;class Widget {int m_x;int m_y;int m_z;public:Widget(int x, int y, int z) :m_x(x), m_y(y), m_z(z){}void print() {cout << m_x << "," << m_y << "," << m_z << endl;}~Widget(){cout << "Widget dtor" << endl;}
};struct DeleteWithLog {void operator()(Widget* w) {data++;delete w;cout << "------ DeleteWithLog delete w" << endl;}int data;
};void deleteFunction(Widget* w) {delete w;cout << "------ deleteFunction delete w" << endl;
}int main()
{{unique_ptr<Widget> w1(new Widget(1, 2, 3));w1->print();cout <<"sizeof(w1) = " <<sizeof(w1) << endl;cout << "------ default delete" << endl;}{DeleteWithLog dw;unique_ptr<Widget, DeleteWithLog> w2(new Widget(10, 20, 30));w2->print();cout << "sizeof(w2) = " << sizeof(w2) << endl;}int data1, data2, data3;{auto lambda = [=](Widget * w) {cout << data1 << data2 << data3 << endl;delete w;cout << "------ lambda delete w" << endl;};unique_ptr<Widget, decltype(lambda)> w3(new Widget(100, 200, 300), lambda);w3->print();cout << "sizeof(w3) = " << sizeof(w3) << endl;}{unique_ptr<Widget, void(*)(Widget*)>w4(new Widget(1000, 2000, 3000), deleteFunction);w4->print();cout << "sizeof(w4) = " << sizeof(w4) << endl;}system("pause");
}

结果:
在这里插入图片描述

http://www.lryc.cn/news/162592.html

相关文章:

  • 人工智能TensorFlow PyTorch物体分类和目标检测合集【持续更新】
  • ElementPlus·面包屑导航实现
  • 【项目管理】PM vs PMO 18点区别
  • 13 Python使用Json
  • PDFBOX和ASPOSE.PDF
  • 第51节:cesium 范围查询(含源码+视频)
  • YOLOv5改进算法之添加CA注意力机制模块
  • Jmeter系列-阶梯加压线程组Stepping Thread Group详解(6)
  • 图像的几何变换(缩放、平移、旋转)
  • 计算机网络第四章——网络层(上)
  • 【MyBatis】一、MyBatis概述与基本使用
  • Java事件机制简介 内含面试题
  • springMVC基础技术使用
  • UI设计师的发展前景是否超越了平面设计?
  • MyBatis的基本操作
  • 【Tomcat】在SpringBoot项目中,Tomcat是如何处理HTTP请求的
  • python开发基础篇1——后端操作K8s API方式
  • 【实践篇】Redis最强Java客户端(一)之Redisson入门介绍
  • 掌握AI助手的魔法工具:解密`Prompt`(提示)在AIGC时代的应用(下篇)
  • 十)Stable Diffussion使用教程:Lora
  • kafka学习-消费者
  • Alibaba(商品详情)API接口
  • OLED透明屏触控:引领未来科技革命的创新力量
  • Ubuntu下QT操作Mysql数据库
  • sqli --【1--10】
  • 《自然语言处理(NLP)的最新进展:Transformers与GPT-4的浅析》
  • Wireshark 用命令行分析数据包
  • LVS DR模式负载均衡群集部署
  • 探讨前后端分离开发的优势、实践以及如何实现更好的用户体验?
  • 微博一面:JVM预热,你的方案是啥?