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

29、make_shared

std::make_shared 是一种用于创建 std::shared_ptr 的推荐方法。
它不仅简洁,而且通常更高效。以下是两种不同的用法及其区别:

  1. auto pointer = std::make_shared<int>(10);

    • 这行代码创建了一个 std::shared_ptr<int>,并初始化为值为 10 的整数。
    • std::make_shared 会在单个内存分配中同时分配控制块和对象,效率更高。
  2. auto pointer = std::make_shared<int>(new int(1));

    • 这行代码实际上是错误的,因为 std::make_shared 不接受指针作为参数。
    • 正确的用法应该是 auto pointer = std::shared_ptr<int>(new int(1));,这会创建一个 std::shared_ptr<int>,指向一个值为 1 的整数。
    • 这种方法需要两次内存分配:一次用于对象,一次用于控制块,效率较低。

总结:

  • std::make_shared<int>(10) 是推荐的用法,效率更高,代码更简洁。
  • std::shared_ptr<int>(new int(1)) 需要手动管理内存分配,容易出错,效率较低。

示例代码:

#include <iostream>
#include <memory>int main() {// 推荐的用法auto pointer1 = std::make_shared<int>(10);std::cout << "pointer1: " << *pointer1 << std::endl;// 不推荐的用法auto pointer2 = std::shared_ptr<int>(new int(1));std::cout << "pointer2: " << *pointer2 << std::endl;return 0;
}

输出:

pointer1: 10
pointer2: 1
http://www.xdnf.cn/news/12708.html

相关文章:

  • GESP 二级复习参考 A
  • 大话软工笔记—需求调研概述
  • Spring Boot 数据访问三剑客:JdbcTemplate、JPA 和 MyBatis 的对决与选择指南
  • 如何判断当前web页面是在钉钉内部打开的?
  • ubuntu服务器件如何配置python环境并运行多个python脚本
  • Xilinx FPGA 重构Multiboot ICAPE2和ICAPE3使用
  • 【LLM】fast-api 流式生成测试
  • MS358A 低功耗运算放大器 车规
  • similarsites网页版入口,一键查询相似网站
  • 露亦如电 · 时之沙 | 让遗憾在灰烬里随风而去
  • 2025 年 Java 核心技术全面升级与深度应用解析
  • 第19节 Node.js Express 框架
  • 平面方程在不同坐标系下的变换与平移
  • Parameter ‘XXX‘ not found. Available parameters are [list, param1]
  • 智慧零售管理中的客流统计与属性分析
  • PL0语法,分析器实现!
  • pikachu靶场通关笔记20 SQL注入03-搜索型注入(GET)
  • 【计算机组成原理】计算机硬件的基本组成、详细结构、工作原理
  • Redis线程安全深度解析:单线程模型的并发智慧
  • [特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
  • 30、memory-order-relaxed
  • 安卓基础(aar)
  • 【工具使用】STM32CubeMX-FreeRTOS操作系统-信号标志、互斥锁、信号量篇
  • linux设备重启后时间与网络时间不同步怎么解决?
  • 【补题】Educational Codeforces Round 107 (Rated for Div. 2) D. Min Cost String
  • PicSharp(图片压缩工具) v1.1.6
  • C++中,字符与字符串直接拼接(重点,易错)
  • 【MySQL】三大范式
  • 【工作记录】接口功能测试总结
  • jenkins 持续集成环境从0到1搭建全过程