C++(独占指针)

news/发布时间2024/5/20 20:26:10

std::unique_ptr 是 C++ 标准库中的一种智能指针,用于管理动态分配的内存。它是一种独占拥有权(exclusive ownership)的智能指针,保证同一时刻只有一个 std::unique_ptr 指向特定的资源。当 std::unique_ptr 被销毁时,它所拥有的资源也会被释放。

以下是 std::unique_ptr 的基本用法和一些注意事项:

基本用法:

#include <iostream>
#include <memory>int main() {// 使用 std::make_unique 创建 std::unique_ptr,拥有一个动态分配的整数std::unique_ptr<int> uniqueInt = std::make_unique<int>(42);// 使用指针操作内存std::cout << "Value: " << *uniqueInt << std::endl;// uniqueInt 指针拥有独占权,不能直接赋值给其他 unique_ptr// std::unique_ptr<int> anotherUniqueInt = uniqueInt;  // 编译错误// 通过 std::move 转移所有权std::unique_ptr<int> anotherUniqueInt = std::move(uniqueInt);// uniqueInt 现在为空,不再拥有资源if (!uniqueInt) {std::cout << "uniqueInt is null" << std::endl;}// anotherUniqueInt 持有资源std::cout << "Value: " << *anotherUniqueInt << std::endl;// 在块的末尾,anotherUniqueInt 被销毁,其拥有的资源也被释放return 0;
}

注意事项和特性:

  1. 独占拥有权: std::unique_ptr 保证同一时刻只有一个指针拥有资源,这避免了共享指针的引用计数和可能的资源竞争。
  2. 移动语义: std::unique_ptr 支持移动语义,通过 std::move 可以转移拥有权。这使得在函数调用中传递 std::unique_ptr 更高效。
  3. 不能直接复制: std::unique_ptr 不能直接进行复制,因为它是独占拥有权的。要进行所有权的转移,需要使用 std::move
  4. 自动释放资源:std::unique_ptr 超出作用域时,它所拥有的资源会被自动释放。这避免了显式的 delete 操作。
  5. 不适合共享所有权: 如果需要共享所有权,应该使用 std::shared_ptr
  6. 适用于动态分配数组: std::unique_ptr 也可用于动态分配数组。例如,std::unique_ptr<int[]> arr = std::make_unique<int[]>(5);

在现代 C++ 中,推荐使用 std::unique_ptr 来管理动态分配的内存,以提高代码的安全性和可读性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/03140077.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

java抽象类

一、概述二、抽象类的特点 示例: 三、抽象类的成员特点

java高级笔记汇总

一、理论知识背诵汇总篇 1、Java常用类System类 Date类(日期类) DateFormat类(日期格式化类) SimpleDateFormat类 Math类 Random类 BigInteger(大整数)类 BigDecimal(大小数)类 Timer定时器2、枚举(将类的对象固定下来) 只能使用它的对象,而不能增加和修改枚举的属性…

php 去除图片以及DIV的width、height、style

1.去掉图片的宽高,去掉DIV的style样式 $str = <div style="margin: 0px auto; width: 740px;"> <p><img width="748" height="444" alt="" src="/images/upload/Image/manmiao_0001.jpg" /></p>&l…

用友U8实施导航导入excel提示:‘本次操作由于这台计算机的限制而被取消,请与你的系统管理员联系。’

问题: 用友U8实施导航导入excel提示:‘本次操作由于这台计算机的限制而被取消,请与你的系统管理员联系。’解决方式: 天联高级版服务器上没有开启浏览服务器磁盘 操作方法:找到天联服务器上发布的程序,右键编辑-程序设置-浏览服务器磁盘,确定之后客户端重新登录即可。

内外网文件传输中面临的4大风险,你都知道吗?

一般来说,企业实施内外网隔离的原因主要就是两个:外因和内因。外因就是因为政策法规要求,这个主要是面向一些特定行业的,比如党政机关、金融、医疗、能源等行业,受这方面监管和要求的会比较多。内因就是为了自身的数据安全考虑,尤其是有敏感核心数据的企业,大部分都会做…

SQL Server编程Note

自身功能 定时任务 1. 打开定时任务管理2. 维护任务设定 脚本语言技巧