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

unique_ptr初始化

`std::unique_ptr` 是 C++11 引入的智能指针,用于管理动态分配的对象的生命周期。`unique_ptr` 确保每个动态分配的对象有且仅有一个所有者,当 `unique_ptr` 超出作用域时,它会自动释放其管理的对象。以下是 `std::unique_ptr` 的一些常见初始化方法。

### 1. 使用 `std::make_unique`

`std::make_unique` 是 C++14 中引入的函数,提供了一种安全的方式来创建 `unique_ptr`。它会自动推导类型并分配内存,避免了手动使用 `new`。

```cpp
#include <memory>

int main() {
    // 使用 std::make_unique 创建 unique_ptr
    auto ptr = std::make_unique<int>(42); // 创建一个指向整数的 unique_ptr
    return 0;
}
```

### 2. 直接使用 `new` 运算符

可以直接使用 `new` 运算符来初始化 `unique_ptr`。这种方法需要显式地使用 `new` 关键字。

```cpp
#include <memory>

int main() {
    // 直接使用 new 初始化 unique_ptr
    std::unique_ptr<int> ptr(new int(42)); // 创建一个指向整数的 unique_ptr
    return 0;
}
```

### 3. 初始化为空

可以初始化一个空的 `unique_ptr`,随后可以在需要时赋值。

```cpp
#include <memory>

int main() {
    // 初始化为空
    std::unique_ptr<int> ptr; // ptr 是 nullptr
    ptr = std::make_unique<int>(42); // 赋值
    return 0;
}
```

### 4. 通过移动构造函数

如果有一个现有的 `unique_ptr`,可以通过移动构造函数来初始化另一个 `unique_ptr`。注意,这样会使源指针变为 nullptr。

```cpp
#include <memory>

int main() {
    auto ptr1 = std::make_unique<int>(42); // ptr1 拥有 42
    std::unique_ptr<int> ptr2 = std::move(ptr1); // ptr2 现在拥有 42,ptr1 变为 nullptr
    return 0;
}
```

### 5. 通过自定义删除器

可以使用自定义删除器初始化 `unique_ptr`,这在需要特定的释放操作时非常有用。

```cpp
#include <memory>
#include <iostream>

struct CustomDeleter {
    void operator()(int* p) const {
        std::cout << "Deleting pointer" << std::endl;
        delete p;
    }
};

int main() {
    // 使用自定义删除器初始化 unique_ptr
    std::unique_ptr<int, CustomDeleter> ptr(new int(42), CustomDeleter());
    return 0;
}
```

### 总结

- **推荐使用 `std::make_unique`**:在 C++14 及更高版本中,它提供了更安全的内存管理和避免内存泄漏的机制。
- **直接使用 `new`**:在 C++11 中,`new` 是有效的初始化方法,但需要注意资源管理。
- **自定义删除器**:在特定场景下需要使用自定义删除逻辑时,可以使用自定义删除器。

使用 `unique_ptr` 的主要目的是管理动态内存,确保在超出作用域时自动释放资源,从而避免内存泄漏。

相关文章:

unique_ptr初始化

std::unique_ptr 是 C11 引入的智能指针&#xff0c;用于管理动态分配的对象的生命周期。unique_ptr 确保每个动态分配的对象有且仅有一个所有者&#xff0c;当 unique_ptr 超出作用域时&#xff0c;它会自动释放其管理的对象。以下是 std::unique_ptr 的一些常见初始化方法。 …...

HelloCTF [RCE-labs] Level 8 - 文件描述和重定向

开启靶场&#xff0c;打开链接&#xff1a; GET传参cmd system($cmd.">/dev/null 2>&1"); 这行代码将执行命令 $cmd&#xff0c;并且将其标准输出和标准错误输出都重定向到 /dev/null&#xff0c;这意味着无论命令的输出还是可能产生的错误信息都不会显示…...

DEVOPS: 集群伸缩原理

概述 阿里云 K8S 集群的一个重要特性&#xff0c;是集群的节点可以动态的增加或减少有了这个特性&#xff0c;集群才能在计算资源不足的情况下扩容新的节点&#xff0c;同时也可以在资源利用 率降低的时候&#xff0c;释放节点以节省费用理解实现原理&#xff0c;在遇到问题的…...

什么是SMO算法

SMO算法&#xff08;Sequential Minimal Optimization&#xff09; 是一种用于求解 支持向量机&#xff08;SVM&#xff09; 二次规划对偶问题的优化算法。它由 John Platt 在 1998 年提出&#xff0c;目的是快速解决 SVM 的优化问题&#xff0c;特别是当数据集较大时&#xff…...

MySQL根据.idb数据恢复脚本,做成了EXE可执行文件

文章目录 1.代码2.Main方法打包3.Jar包打成exe可执行文件4.使用&#xff08;1.&#xff09;准备一个表结构一样得数据库&#xff08;2.&#xff09;打开软件&#xff08;3.&#xff09;输入路径 5.恢复成功 本文档只是为了留档方便以后工作运维&#xff0c;或者给同事分享文档内…...

Spring Boot面试题

1.什么是SpringBoot&#xff1f;它的主要特点是什么&#xff1f; Spring Boot 是一个基于 Spring 框架的开发和构建应用程序的工具&#xff0c;它旨在简化 Spring 应用的初始搭建和开发过程。Spring Boot 提供了一种约定优于配置的方式&#xff0c;通过自动配置和默认值&#…...

原生页面引入Webpack打包JS

Webpack简介 概述&#xff1a; Webpack是一个现代JavaScript应用程序的静态模块打包器。它将应用程序中的每个文件视为一个模块&#xff0c;并通过配置规则来解析这些模块之间的依赖关系&#xff0c;最终将其打包成一个或多个浏览器可以执行的文件。动态加载&#xff08;Code …...

健康之路押注医药零售:毛利率下滑亏损扩大,医疗咨询人次大幅减少

《港湾商业观察》黄懿 2024年9月13日&#xff0c;健康之路股份有限公司&#xff08;下称“健康之路”&#xff09;再次递表港交所&#xff0c;建银国际为独家保荐人。健康之路国内运营主体为健康之路&#xff08;中国&#xff09;信息技术有限公司和福建健康之路信息技术有限公…...

【人工智能-初级】第7章 聚类算法K-Means:理论讲解与代码示例

文章目录 一、K-Means聚类简介二、K-Means 聚类的工作原理2.1 初始化簇中心2.2 分配簇标签2.3 更新簇中心2.4 迭代重复2.5 K-Means 算法的目标三、K-Means 聚类的优缺点3.1 优点3.2 缺点四、K 值的选择五、Python 实现 K-Means 聚类5.1 导入必要的库5.2 生成数据集并进行可视化…...

HOT 100 技巧题(136/169/75/31/287)

136. 只出现一次的数字 技巧类型题目&#xff0c;通过异或运算实现 169. 多数元素 三种常见解法&#xff1a;1. 哈希2. 排序3. 投票法 75. 颜色分类 单指针 两次遍历&#xff1a;第一次遍历把所有0都交换到前面&#xff0c;记录最后一个0的位置index&#xff0c;第二次遍…...

什么是时间戳?怎么获取?有什么用?

在 JavaScript 中&#xff0c;时间戳通常表示为自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。我们可以使用 Date 对象来获取当前时间的时间戳&#xff0c;或者将特定的日期转换为时间戳。在JavaScript中&#xff0c;时间戳通常以毫秒为单位表示。 如何获取时间戳 在Java…...

LeetCode:459重复的子字符串

给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。示例 2: 输入: s "aba" 输出: false示例 3: 输入: s "abcabcabcabc" 输…...

【含开题报告+文档+PPT+源码】基于SSM的旅游与自然保护平台开发与实现

开题报告 围场县拥有丰富的自然景观和野生动植物资源&#xff0c;同时面临着旅游业发展和自然保护之间的平衡问题&#xff0c;通过强调自然保护&#xff0c;这个平台可以教育游客如何尊重和保护当地的生态环境。同时&#xff0c;平台还可以提供关于生态保护的信息&#xff0c;…...

【ANTs】医疗影像工具ANTs多种安装方式教程

介绍ANTs的几种简单的安装教程 基于Releases的安装 Github上选择适配自己操作系统的安装包,链接: link 一般使用最新版本。这里官方操作说明,支持Ubuntu、MacOS、CentOS,但是windows有安装包,不知道怎么用。。。 下载后有两个文件夹,bin和lib,bin里面长这样(图示wind…...

想要音频里的人声,怎么把音频里的人声和音乐分开?

在音频处理领域&#xff0c;将音频中的人声和音乐分开是一个常见需求&#xff0c;尤其对于音乐制作、影视后期以及个人娱乐应用来说&#xff0c;这种分离技术显得尤为重要。随着科技的发展&#xff0c;现在已经有多种方法可以实现这一目的。 一、使用专业音频处理软件 市面上有…...

python代码中通过pymobiledevice3访问iOS沙盒目录获取app日志

【背景】 在进行业务操作过程中&#xff0c;即在app上的一些操作&#xff0c;在日志中会有对应的节点&#xff0c;例如&#xff0c;下面是查看设备实时视频过程对应的一些关键节点&#xff1a; 1、TxDeviceAwakeLogicHelper&#xff1a;wakeStart deviceId CxD2BA11000xxxx …...

Spring AOP 使用方法总结

AOP切面编程的最佳应用场景 记录日志性能监控事务管理处理异常数据验证&#xff0c;验证传入参数的正确性&#xff08;一般不用这个方法做&#xff0c;而是用拦截器&#xff09; spring提供了以下注解供开发者使用&#xff0c;编写AOP程序 Aspect 申明切面Pointcut 切点&#…...

LeetCode 每日一题 2024/10/21-2024/10/27

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 10/21 910. 最小差值 II10/22 3184. 构成整天的下标对数目 I10/23 3185. 构成整天的下标对数目 II10/24 3175. 找到连续赢 K 场比赛的第一位玩家10/25 3180. 执行操作可获得…...

不到1500元的I卡可以玩转3A大作吗?撼与科技Intel Arc A750显卡游戏性能实

一、前言 还记得2022年10月的时候&#xff0c;英特尔发布了Arc A750和A770显卡&#xff0c;和此前所发布的DG1、A380不同&#xff0c;这两张显卡可以说是真正意义上的游戏显卡。不知不觉间&#xff0c;两年已经过去了&#xff0c;在这两年期间&#xff0c;英特尔不仅在积极地打…...

STK与MATLAB互联——仿真导航卫星与地面用户间距离和仰角参数

文章目录 构建GPS星座创建单个PRN的GPS卫星创建GPS星座&#xff0c;并为其添加发射机 北斗星座构建搭建低轨铱星星座构建一颗轨道高度为800km/1000km/1200km的低轨卫星构建一颗轨道高度为800km/1000km/1200km的低轨卫星建立地面站&#xff0c;可见性分析确定地面站坐标分析单颗…...

如何快速掌握ComfyUI-WanVideoWrapper:AI视频生成从入门到精通

如何快速掌握ComfyUI-WanVideoWrapper&#xff1a;AI视频生成从入门到精通 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper ComfyUI-WanVideoWrapper 是一款专为ComfyUI设计的强大AI视频生成插件…...

独立开发者如何借助Taotoken应对大模型API调用波动

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken应对大模型API调用波动 对于独立开发者而言&#xff0c;项目的稳定性和可控成本是生存与发展的关键。在…...

便民服务渠道智慧整合融通方案

便民服务渠道智慧整合融通方案 目录 第1章项目概述 7 1.1项目背景 7 1.2项目建设目标 7 1.2.1总体目标 8 1.2.2具体目标 8 1.3项目建设范围 9 1.3.1渠道整合范围 9 1.3.2业务覆盖范围 10 1.3.3系统建设范围 10 1.4项目建设意义 11 1.4.1对群众的意义 11 1.4.2对政府的意义 11 …...

告别手动重命名!Win10下用CMD脚本批量给照片加001-999编号(保姆级教程)

告别手动重命名&#xff01;Win10下用CMD脚本批量给照片加001-999编号&#xff08;保姆级教程&#xff09; 每次整理上百张照片时&#xff0c;最痛苦的就是一张张手动重命名。作为一名经常需要处理大量素材的自媒体创作者&#xff0c;我试过各种方法——从资源管理器的F2快捷键…...

Shell脚本守护工具sh-guard:提升Linux自动化脚本可靠性

1. 项目概述&#xff1a;一个被低估的Shell脚本守护神 如果你经常和Linux服务器打交道&#xff0c;或者需要编写一些自动化运维、部署、监控的Shell脚本&#xff0c;那你一定遇到过这样的场景&#xff1a;脚本在后台运行&#xff0c;突然因为网络波动、资源不足、依赖服务异常而…...

边缘计算大模型部署实战:从LLaMA量化到树莓派推理优化

1. 项目概述&#xff1a;一个为边缘计算优化的轻量级大语言模型最近在折腾边缘设备上的AI应用&#xff0c;发现一个挺有意思的项目——KuiperLLama。这名字听起来就很有“边缘”感&#xff0c;Kuiper&#xff08;柯伊伯带&#xff09;是太阳系边缘的一个区域&#xff0c;用它来…...

半导体制造可持续转型:数据驱动、绿色技术与循环设计实践

1. 项目概述&#xff1a;当芯片制造遇上可持续发展干了十几年半导体行业&#xff0c;从设计到制造环节都摸过一遍&#xff0c;最近几年感受最深的一个变化就是&#xff0c;大家聊天的关键词里&#xff0c;“可持续”出现的频率越来越高。这不再是企业社会责任报告里一句轻飘飘的…...

硬件工程师的办公室布局与效率系统:从工具管理到创意激发

1. 我的“极乐之穹”&#xff1a;一个硬件工程师的办公室漫游每次在博客里提到“极乐之穹”&#xff0c;指的都是我的办公室。偶尔&#xff0c;我也会聊起在四处搜罗时遇到并收入囊中的那些令人心动的电子设备或“艺术品”。时间久了&#xff0c;总有人让我拍点照片分享。问题在…...

从游戏角色到人脸分析:聊聊‘摇头、点头、转头’背后的欧拉角与万向节死锁

游戏角色控制与人脸分析的奇妙交汇&#xff1a;解码欧拉角与万向节死锁 想象一下你在玩一款3A级开放世界游戏&#xff1a;按下左摇杆&#xff0c;角色开始左右张望&#xff1b;推动右摇杆&#xff0c;角色抬头望向天空中的飞龙&#xff1b;同时扳动两个摇杆&#xff0c;角色做出…...

2026 年 Docker 镜像加速终极方案:告别拉取卡顿,一键提速

大家好&#xff01;相信很多开发者都遇到过这样的问题&#xff1a;在配置 Docker 环境时&#xff0c;docker pull 命令经常卡住不动&#xff0c;进度条仿佛静止了一般&#xff0c;严重影响开发效率。为了解决这个痛点&#xff0c;我深入研究并测试了多种方案&#xff0c;最终整…...