泛型指针,原生指针和智能指针
1. 泛型指针 泛型指针有多种含义。 (1) 指void*指针,可以指向任意数据类型,因此具有“泛型”含义。 (2) 指具有指针特性的泛型数据结构,包含泛型的迭代器、智能指针等。 广义的迭代器是一种不透明指针,能够实现遍历访问操作。通常所说的迭代器是指狭义的迭代器,即基于C++的STL中基于泛型的iterator_traits实现的类的实例。 总体来说,泛型指针和迭代器是两个不同的概念,其中的交集则是通常提到的迭代器类。2. 原生指针就是普通指针,与它相对的是使用起来行为上象指针,但却不是指针。 说“原生”是指“最简朴最基本的那一种”。因为现在很多东西都抽象化理论化了,所以“以前的那种最简朴最基本的指针”只是一个抽象概念(比如iterator)的表现形式之一。3. 智能指针是C++里面的概念:由于 C++ 语言没有自动内存回收机制,程序员每次得自己处理内存相关问题,但用智能指针便可以有效缓解这类问题。 引入智能指针可以防止出现悬垂指针的情况 一般是把指针封装到一个称之为智能指针类中,这个类中另外还封装了一个使用计数器,对指针的复制等操作将导致该计数器的值加1,对指针的delete操作则会减1,值为0时,指针为NULL
总结:
在大型项目中或者代码结构比较复杂的时候,智能指针的优越性很是明显,如果使用原生指针,很有可能忘记delete或者错误的delete导致内存泄漏,各种不好定位的问题。
泛型指针,原生指针和智能指针相关推荐
- C++智能指针使用指南 part2:智能指针本身的方法以及使用建议
目录 往期文章 智能指针本身的方法 对于unique_ptr 对于shared_ptr 对于weak_ptr 使用建议 1.使用工厂函数而非new构造对象 2.在类内部调用其他类的方法 3.在某类内部 ...
- 【C++ 语言】智能指针 引入 ( 内存泄漏 | 智能指针简介 | 简单示例 )
文章目录 I . 智能指针 引入 II . 智能指针 简介 III . 智能指针 简单示例 I . 智能指针 引入 1 . 示例前提 : 定义一个 Student 类 , 之后将该类对象作为智能指针指 ...
- C++智能指针(一)智能指针的简单介绍
https://blog.csdn.net/nou_camp/article/details/70176949 C++智能指针 在正式了解智能指针前先看一下下面的一段代码 #include<i ...
- c语言智能指针是什么,C++ 智能指针深入解析
1. 为什么需要智能指针?简单的说,智能指针是为了实现类似于Java中的垃圾回收机制.Java的垃圾回收机制使程序员从繁杂的内存管理任务中彻底的解脱出来,在申请使用一块内存区域之后,无需去关注应该何时 ...
- 智能指针(一)—— 智能指针的底层原理(RAII特性)
我们使用 new关键字 或者 malloc函数 开辟一块空间时,因为这块空间是在堆上开辟的,如果不手动释放,即便出了作用域,这块空间也依然存在,这个时候就会造成内存泄漏. 为了保证资源的释放,我们可以 ...
- Android 智能指针 视频,Android系统智能指针中轻量级指针
lp.sp.wp在Android Native层中被大量使用,所以非常有必要学习它们的实现原理.lp是Light Pointer的缩写,表示轻量级指针,sp是Strong Pointer的缩写,表示强 ...
- android wp指针使用方法,Android智能指针RefBase、sp、wp解析
[TOC] 在Android系统中,Native层的代码基本都是C++写的,C++跟Java不一样,C++没有垃圾回收机制,C++代码中难于管理new出来对象的释放,稍有不慎就造成内存泄漏.针对此问题 ...
- 指针中的战斗机---智能指针!!!
指针是C语言中的精髓,智能指针是C++中的王炸! 温故知新,可以为师.在开启智能指针学习篇章前,先来探望老朋友-C语言中的精髓-指针.指针的本质是变量,何为变量,变量就是用特定的数据类型做的moonc ...
- 智能指针的释放_手把手教你实现智能指针
一. 为什么使用智能指针 C++的内存管理是让很多人头疼的事,因为C++语言中没有垃圾回收机制,当我们通过new语句动态申请堆空间时,用完这个堆空间时就得用delete语句释放申请的堆空间,不然就会导 ...
- 智能指针——auto_ptr
1. 开篇 C++里面的四个智能指针:auto_ptr.unique_ptr.shared_ptr.weak_ptr,其中后三个是C++11支持,而这个auto_ptr已经被C++11弃用.但auto ...
最新文章
- 利用 socket 获取 tcp 包并解析的问题。
- python1000个常用代码-30个Python常用极简代码,拿走就用
- MS SQL基础:注释符、运算符与通配符
- ZJOI2013 防守战线
- 用SparseArray代替HashMap
- Ubuntu 16.04网速慢解决方法
- Codeforces Round #610 (Div. 2) D. Enchanted Artifact 交互 + 思维
- jsp循环输出表格_「翻译」JS可视化学习之七:Promise、事件循环和异步2
- android sdk与adt版本,eclipse中sdk与adt版本不兼容该怎么解决? 三种方法帮你搞定
- JAVA蓝桥杯:杨辉三角形
- 使用JavaScript将小写金额转化为大写金额的两种常见方法
- 服务器改无线路由器怎么设置,怎么把旧路由器改装成中继器
- 一、用例图、功能模块图、ER图之间的区别和联系
- 郑大计算机专业英语01章,郑州大学远程教育《大学英语II》第01章在线测试
- “工业互联网+安全生产”,提升工业企业安全水平
- 信捷plc485通信上位机_三菱FX3U编程口通信上位机QT实现
- SCSA❀基础信息安全概述
- 浅谈虚拟化软件再防泄密领域的表现如何
- 产品经理-能力、技能要求
- 大脑和小脑——规划和执行
热门文章
- 楼道游戏 c语言,C语言基础题!
- Tally项目笔记001
- widnows监控linux 内存,在windows下监控linux的cpu和内存
- sql 语句 查询结果赋值变量_RationalDMIS 7.1 变量赋值 ASSIGN语句
- html中怎么加入动态图片,视频加动态水印 怎么在视频画面中添加一个gif动态图片水印...
- 内蒙古电大计算机考试成绩查询成绩查询,中考查分系统
- 2018初中计算机考试知识点,[2018年最新整理]全国计算机一级考试MS_Office知识点.docx...
- Oracle11g exp 1445,oracle11g 导出表报EXP-00011:table不存在。
- java删除指定文件后重新建立文件系统_java file 操作之创建、删除文件及文件夹...
- 威纶通触摸屏与仪表通讯_用博途建立西门子触摸屏和S7300PLC的通讯