C++智能指针

unique_ptr 

#include <iostream>
#include <memory>
using namespace std;
int main()
{//智能指针unique_ptr  原始指针void* int* char*// 1. 在任意时刻,都只能有一个指针管理内存// 2. 在指针超出作用域时,会自动释放// 3. 指针类型不可拷贝,只可以move//    int num = 12;int* p = new int(100);//    *p = num;unique_ptr<int> up = make_unique<int>(*p); //使用make_unique//    unique_ptr<int> up(p); //传入指针cout << *up << endl; //出了作用域自动销毁了cout << p << endl;cout << up.get() << endl;}

shared_ptr

#include <iostream>
#include <memory>
using namespace std;
int main()
{// shared_ptr 共享指针//可以共享数据//常量类型shared_ptr<int> p = make_shared<int>(10);//    shared_ptr<int> pp = make_shared<int>{new int(11)};//    cout << "value =" << pp << endl;cout << "value =" << p << endl;cout << "use count = " << p.use_count();shared_ptr<int> pp = p; // copycout << "p use count = " << p.use_count() << endl;cout << "pp use count = " << pp.use_count() << endl;*pp = 12; //两个都会发生改变cout << "p value =" << *p << endl;cout << "pp value =" << *pp << endl;//    pp = nullptr; //设置为null;会清理2不会清理1p = nullptr; //设置为null;会清理1不会清理2cout << "p use count = " << p.use_count() << endl;cout << "pp use count = " << pp.use_count() << endl;//自定义类型return 0;
}

不能将shared_ptr转为unique_ptr,但是可以将unique_ptr转为shared_ptr,通过std::move函数。

常见的设计

将你的函数返回unique_ptr是一种常见的设计模式,这样可以提高代码的复用度,你可以随时改变shared_ptr

#include <iostream>
#include <memory>
using namespace std;std::unique_ptr<int> get_fun()
{//    cout << p << endl;unique_ptr<int> p = make_unique<int>(10);*p = 121212121;return p;
}
int main()
{unique_ptr<int> p = make_unique<int>(12);cout << "p.get()=" << p.get() << endl; //shared_ptr<int> sp = move(p); //转换cout << "sp count = " << sp.use_count() << endl;cout << "p.get()=" << p.get() << endl; //不可以使用了shared_ptr<int> sp3 = get_fun();if (sp3) {cout << "*sp3 = " << *sp3 << endl; //不可转换cout << "sp3.use_count()" << sp3.use_count() << endl;//        sp3.use_count();} else {cout << "error" << endl;}return 0;
}

weak_ptr

没有所有权,不能调用->和解引用*

 

#include <iostream>
#include <memory>
using namespace std;std::unique_ptr<int> get_fun()
{//    cout << p << endl;unique_ptr<int> p = make_unique<int>(10);*p = 121212121;return p;
}
int main()
{shared_ptr<int> p = make_shared<int>(122);weak_ptr<int> wp(p);*p = 120;cout << "p value = " << *p << endl;shared_ptr<int> pp = wp.lock(); //转为 共享指针cout << "pp value = " << *pp << endl;cout << "shared_prt count = " << p.use_count() << endl;cout << "wpak_prt count = " << wp.use_count() << endl;cout << " wp.expired= " << wp.expired() << endl;return 0;
}

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

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

相关文章

在Mac上搭建Gradle环境

在Mac上搭建Gradle环境&#xff1a; 步骤1&#xff1a;下载并安装Java开发工具包&#xff08;JDK&#xff09; Gradle运行需要Java开发工具包&#xff08;JDK&#xff09;。您可以从Oracle官网下载适合您的操作系统版本的JDK。请按照以下步骤进行操作&#xff1a; 打开浏览器…

kubernetes调试利器——kubectl debug工具

通常情况下&#xff0c;业务容器所使用的镜像是非常精简的&#xff0c;而一旦业务容器出现问题&#xff0c;通过kubectl exec进入到容器时&#xff0c;我们会发现自己需要使用的工具都没有&#xff0c;也无法通过apt, apt-get, yum等包管理工具下载需要的工具。 想要解决这个尴…

【NLP】语音识别 — GMM, HMM

一、说明 在语音识别的深度学习&#xff08;DL&#xff09;时代之前&#xff0c;HMM和GMM是语音识别的两项必学技术。现在&#xff0c;有将HMM与深度学习相结合的混合系统&#xff0c;并且有些系统是免费的HMM。我们现在有更多的设计选择。然而&#xff0c;对于许多生成模型来说…

C语言---每天小练习,从大到小输出

题目&#xff1a;从大到小输出 写代码将三个整数数按从大到小输出。 例如&#xff1a; 输入&#xff1a;2 3 1 输出&#xff1a;3 2 1 int main() {// 初始化int a 0;int b 0;int c 0;int d 0;scanf("%d %d %d", &a, &b, &c);if (a < b) {…

力扣算法数学类—剑指 Offer 16. 数值的整数次方

目录 剑指 Offer 16. 数值的整数次方 题解&#xff1a; 知识点&#xff1a; 代码&#xff1a; 结果&#xff1a; 实现 pow(x, n) &#xff0c;即计算 x 的 n 次幂函数&#xff08;即&#xff0c;xn&#xff09;。不得使用库函数&#xff0c;同时不需要考虑大数问题。 示例…

【Matplotlib 绘制直方图】

使用 Matplotlib 绘制直方图 在数据分析和数据可视化中&#xff0c;直方图是一种常见的图表类型&#xff0c;用于展示数据的分布情况。Python 的 Matplotlib 库为我们提供了方便易用的功能来绘制直方图。 绘制直方图 下面的代码展示了如何使用 Matplotlib 绘制一个直方图&am…

UE使用UnLua(二)

1.前言 最近也是比较忙&#xff0c;忘了来更新了&#xff0c;好多都是开了头断更的&#xff08;狗头&#xff09;&#xff0c;今天抽空再更一篇&#xff01;&#xff01; 这篇讲一下在UnLua中覆盖蓝图事件&#xff08;函数&#xff09;&#xff0c;及按钮、文本控件的一些使用…

Node.js 安装与版本管理(nvm 的使用)

安装 Node.js Node.js 诞生于 2009 年 5 月&#xff0c;截至今天&#xff08;2022 年 3 月 26 号&#xff09;的最新版本为 16.14.2 LTS 和 17.8.0 Current&#xff0c;可以去官网下载合适的版本。 其中&#xff0c;LTS&#xff08;Long Term Support&#xff09; 是长期维护…

3的幂,给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false。

题记&#xff1a; 给定一个整数&#xff0c;写一个函数来判断它是否是 3 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 整数 n 是 3 的幂次方需满足&#xff1a;存在整数 x 使得 n 3^x 示例 1&#xff1a; 输入&#xff1a;n 27 输出…

四元数

public static Quaternion Euler(Vector3 euler); 传入一个向量&#xff0c;使物体旋转&#xff0c;如&#xff1a; cube.transform.rotationQuaternion.Euler(new Vector3(0,30,0)); 值得注意的是&#xff1a;Unity中组件Transform的Rotation实际上是Quaternion类型的 publ…

【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境

知识点&#xff1a;简单了解K210芯片 2018年9月6日,嘉楠科技推出自主设计研发的全球首款基于RISC-V的量产商用边缘智能计算芯片勘智K210。该芯片依托于完全自主研发的AI神经网络加速器KPU,具备自主IP、视听兼具与可编程能力三大特点,能够充分适配多个业务场景的需求。作为嘉楠科…

详解Mybatis之动态sql问题

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 文章目录 一. 在sql映射文件中如何写注释&#xff1f;二. 什么是动态sql&#xff1f;三. 动态sql常用标签有…

Android Studio 中使用 FlutterJsonBeanFactory

1、创建entity 安装FlutterJsonBeanFactory插件&#xff0c;在文件夹下右键 New -> JsonDartBeanAction 2、删除entity&#xff0c;直接右键删除entity&#xff0c;然后到generated/json/base/json_convert_content.dart文件&#xff0c;按下快捷键altj即可 参考文章 ht…

VBA操作WORD(六)另存为不含宏的文档

Sub 另存为不含宏的文档()Application.DisplayAlerts False Application.ScreenUpdating FalseDim oDoc As DocumentSet oDoc Word.ActiveDocumentDim oRng As RangeSet oRng oDoc.ContentDim sPath As String默认存储路径&#xff0c;当前用户桌面&#xff0c;注释掉的是当…

pycharm 使用远程服务器 jupyter (本地jupyter同理)

1. 远程服务器miniconda 环境中创建jupyter环境 # 1. 激活环境 conda activate envname#2. 在环境中安装jupyter pip install jupyter # 或者 conda install jupyter#3. 生成jupyter_notebook_config.py文件 jupyter notebook --generate-config#4. 设置密码 jupyter noteboo…

Spark编程-SparkSQL

SparkSql能做些啥 Spark SQL的核心概念是DataFrame&#xff0c;它是一个分布式的数据集合&#xff0c;类似于关系数据库中的表。支持使用SQL语言直接对DataFrame进行查询,提供了丰富的内置函数和表达式&#xff0c;可以用于数据的转换、过滤和聚合等操作,支持多种数据源&#…

功能测试也可以发现数据库相关的性能问题

很多同学认为功能测试和性能测试是严格分开的&#xff0c;功能测试人员无法发现性能问题。其实不是这样的&#xff0c;功能测试人员在验证功能时也可以发现性能问题&#xff1b;一些功能反而在功能测试环境不好验证&#xff0c;需要在性能环境上测试。 今天咱们就说一下测试涉及…

Leetcode 滑动窗口题目总结

(Leetcode 滑动窗口题目总结) 1&#xff1a; 3.无重复字符的最长子串 https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/子串 和 子序列的区别&#xff1a;字串是连续的&#xff0c;子序列是非连续的。快慢指针 i 和 j&#xff0c;…

前端面试题 —— React (二)

目录 一、React 组件中怎么做事件代理&#xff1f;它的原理是什么&#xff1f; 二、React.Component 和 React.PureComponent 的区别 三、Component, Element, Instance 之间有什么区别和联系&#xff1f; 四、React声明组件有哪几种方法&#xff0c;有什么不同&#xff1f…

QT项目代码去UI界面常用开发步骤

QT项目代码去UI界面常用开发步骤 因项目开发需求&#xff0c;领导要求整个QT项目中不要用UI方式来实现界面&#xff0c;这样能保障程序运行稳定性以及代码的逻辑和可读性,先记录具体操作步骤如下&#xff1a; 1、首先我们通过拖控件的方式来实现界面的设计效果&#xff0c…