美文网首页
再探指针(智能指针)

再探指针(智能指针)

作者: jazzi | 来源:发表于2017-03-14 12:55 被阅读0次

指针是一个指向内存中存储某个变量的地址。如果你对指针进行解引用操作,就能访问指针指向的变量。指针实际上是一个基础变量,它不知道 它所指向的值是否有效,也不能感知其指向的值是否无效。在C语言中,一个指针指向0,说明其不指向任何值,因此也不具有有个有效的值。所有其他指针都应该 指向内存中有意义的地址。但实际上,有些指针没有正确的初始化,或者干脆越出了应有的范围。

在C++11中,将指针正确初始化为0的方法是使用关键字nullptr。这让计算机知道该指针当前为空。另外,还有一种常用的方式是将0定义为 NULL或者其他定义或声明。C++11中使用nullptr统一了这种方式。C++中还引入了引用,它看起来像是变量的别名,其优势是使用引用的时候必 须先初始化,因此,在引用生命周期起始时需要指向一个有效地址。不过,引用也只是指针的解引用,所以,一旦其引用的变量作用范围结束,其引用也无效了,使 用指针时,你可以将指针置为0,但是针对引用却不能这么做。

但是在C++11和在C++11标准之前,一些事情发生了变化,指针是语言的核心概念,但是你在现代化的C++代码和函数库中却很少看到它们。远在 C++11之前,boost创建了一系列非常有用的智能指针类,针对指针进行了封装,对其核心机制通过操作符重载。智能指针本身不是一个指针,而是一个栈 上的变量或对象成员。智能指针使用了RAII来解决指针的一些问题,这并不是指针的职责。当在椎中分配内存时,new返回了指向该部分内存的地址,所以每 分配一块动态内存,就需要使用一个指针,相当于创建对象的一个操作句柄。但是指针仅仅是一个简单的变量,不知道变量的拥有关系,也不能自动释放堆上的内存 空间。智能指针担当了这一角色,拥有指针并在变量超出作用域时自动管理其堆上的值。在栈上的值意味着,一旦相应的栈被销毁,其管理的堆上的值会被自动释 放,即使是在发生异常的情况下。

相关文章

  • 再探指针(智能指针)

    指针是一个指向内存中存储某个变量的地址。如果你对指针进行解引用操作,就能访问指针指向的变量。指针实际上是一个基础变...

  • 目录

    智能指针(1) 智能指针(2) 智能指针(3) 智能指针之使用 容器 - vector(1) 容器 - vecto...

  • C++面试重点再梳理

    智能指针 请讲一下智能指针原理,并实现一个简单的智能指针 智能指针其实不是一个指针。它是一个用来帮助我们管理指针的...

  • 智能指针到Android引用计数

    智能指针 LightRefBase RefBaseStrongPointerWeakPointer 智能指针 这是...

  • C++研发工程师笔试题/面试题(1-10)

    1. (1) 简述智能指针的原理;(2)c++中常用的智能指针有哪些?(3)实现一个简单的智能指针。 简述智能指针...

  • C++ 引用计数技术及智能指针的简单实现

    1.智能指针是什么 简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。...

  • 第十六章 string类和标准模板库(2)智能指针模板类

    (二)智能指针模板类 智能指针是行为类似指针的类对象,但这种对象还有其他便于管理内存的功能。 1.使用智能指针 (...

  • Android智能指针

    网上已经有很多分析智能指针的文章了,讲得不错的是:Android系统的智能指针(轻量级指针、强指针和弱指针)的实现...

  • 智能指针

    1. 什么是智能指针? 智能指针是行为类似于指针的类对象,但这种对象还有其他功能。 2. 为什么设计智能指针? 引...

  • Rust for cpp devs - 智能指针

    与 cpp 类似,Rust 也有智能指针。Rust 中的智能指针与引用最大的不同是,智能指针 own 内存,而引用...

网友评论

      本文标题:再探指针(智能指针)

      本文链接:https://www.haomeiwen.com/subject/dbacnttx.html