返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++智能指针实例代码分析
  • 802
分享到

C++智能指针实例代码分析

2023-06-30 17:06:20 802人浏览 薄情痞子
摘要

这篇文章主要讲解了“c++智能指针实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++智能指针实例代码分析”吧!一、内存泄漏-永恒的话题动态申请堆空间,用完后不归还C++ 语言中

这篇文章主要讲解了“c++智能指针实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++智能指针实例代码分析”吧!

一、内存泄漏-永恒的话题

  • 动态申请堆空间,用完后不归还

  • C++ 语言中没有垃圾回收的机制

  • 指针无法控制所指堆空间的生命周期

下面看一段内存泄漏的代码:

#include <iOStream>#include <string>using namespace std;class Test{    int i;public:    Test(int i)    {        this->i = i;    }    int value()    {        return i;    }    ~Test()    {    }};int main(){    for(int i=0; i<5; i++)    {        Test* p = new Test(i);                cout << p->value() << endl;          }        return 0;}

输出结果如下:

C++智能指针实例代码分析

二、深度思考

  • 需要一个特殊的指针

  • 指针生命周期结束时主动释放堆空间

  • 一片堆空间最多只能由一个指针标识

  • 杜绝指针运算和指针比较

三、智能指针分析

解决方案

  • 重载指针特征操作符( -> 和 * )

  • 只能通过类的成员函数重载

  • 重载函数不能使用参数

  • 只能定义一个重载函数

下面看一段智能指针的使用示例:

#include <iostream>#include <string>using namespace std;class Test{    int i;public:    Test(int i)    {        cout << "Test(int i)" << endl;        this->i = i;    }    int value()    {        return i;    }    ~Test()    {        cout << "~Test()" << endl;    }};class Pointer{    Test* mp;public:    Pointer(Test* p = NULL)    {        mp = p;    }    Pointer(const Pointer& obj)    {        mp = obj.mp;        const_cast<Pointer&>(obj).mp = NULL;    }    Pointer& operator = (const Pointer& obj)    {        if (this != &obj)        {            delete mp;            mp = obj.mp;            const_cast<Pointer&>(obj).mp = NULL;        }        return *this;    }    Test* operator -> ()    {        return mp;    }    Test& operator * ()    {        return *mp;    }    bool isNull()    {        return (mp == NULL);    }    ~Pointer()    {        delete mp;    }};int main(){    Pointer p1 = new Test(0);    cout << p1->value() << endl;    Pointer p2 = p1;    cout << p1.isNull() << endl;    cout << p2->value() << endl;    return 0;}

输出结果如下:

C++智能指针实例代码分析

注意这两行代码的含义,

mp = obj.mp;const_cast<Pointer&>(obj).mp = NULL;

表明当前对象的成员指针指向初始化对象的成员指针所对应的堆空间,这就两个智能指针对象指向了同一片堆空间,然后 const_cast<Pointer&>(obj).mp = NULL; 表明初始化对象把自己管理的堆空间交给当前对象。这就完成了前面说的“一片堆空间最多只能由一个指针标识”。

智能指针使用的军规:只能用来指向堆空间中的对象或者变量

感谢各位的阅读,以上就是“C++智能指针实例代码分析”的内容了,经过本文的学习后,相信大家对C++智能指针实例代码分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: C++智能指针实例代码分析

本文链接: https://lsjlt.com/news/330605.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++智能指针实例代码分析
    这篇文章主要讲解了“C++智能指针实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++智能指针实例代码分析”吧!一、内存泄漏-永恒的话题动态申请堆空间,用完后不归还C++ 语言中...
    99+
    2023-06-30
  • C++ 智能指针代码解析
    目录前言1,aoto_ptr2,unique_ptr3,share_ptr4, weak_ptr总结前言 如果在程序中使用new从堆分配内存,等到不再需要时,应使用delete将其释...
    99+
    2024-04-02
  • C++智能指针使用实例分析
    这篇文章主要介绍了C++智能指针使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++智能指针使用实例分析文章都会有所收获,下面我们一起来看看吧。1.简介程序运行时存在静态空间、栈和堆区,用堆来存储动...
    99+
    2023-06-30
  • C++的智能指针使用实例分析
    今天小编给大家分享一下C++的智能指针使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是RAIIRAII(Re...
    99+
    2023-06-29
  • C++智能指针shared_ptr与weak_ptr的实现分析
    目录shared_ptrweak_ptr内存模型RefCnt 和 Mdel实现shared_ptr 实现weak_ptr 实现shared_from_this()循环引用shared...
    99+
    2024-04-02
  • C++深入分析讲解智能指针
    目录1.简介2.unique_ptr指针(独占指针)3.shared_ptr指针(共享所有权)4.weak_ptr(辅助作用)5.自实现初级版智能指针6.总结1.简介 程序运行时存在...
    99+
    2024-04-02
  • C++中指针实例分析
    这篇文章主要介绍“C++中指针实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++中指针实例分析”文章能帮助大家解决问题。计算机的内存模型CPU是计算机的核心部件,要想让一个CPU工作,就必...
    99+
    2023-06-19
  • C++学习之移动语义与智能指针的实例分析
    这篇文章给大家分享的是有关C++学习之移动语义与智能指针的实例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。移动语义1.几个基本概念的理解(1)可以取地址的是左值,不能取地址的就是右值,右值可能存在寄存器,也...
    99+
    2023-06-15
  • C++智能指针shared_ptr
    目录1、什么是shared_ptr?2、shared_ptr支持哪些操作?3、如何创建shared_ptr的实例?4、什么是shared_ptr的引用计数?如何查看?5、shared...
    99+
    2024-04-02
  • C++的this指针实例分析
    这篇文章主要介绍了C++的this指针实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的this指针实例分析文章都会有所收获,下面我们一起来看看吧。this指针是存在与类的成员函数中,指向被调用函数...
    99+
    2023-06-27
  • C++11中的智能指针shared_ptr、weak_ptr源码解析
    目录1、前言2、源码准备3、智能指针概念4、源码解析4.1、shared_ptr解析4.1.1、shared_ptr4.1.2、__shared_ptr4.1.3、__shared_...
    99+
    2024-04-02
  • C语言智能指针之weak_ptr浅析
    目录前言使用环境测试过程现象分析总结前言 weak_ptr这个指针天生一副“小弟”的模样,也是在C++11的时候引入的标准库,它的出现完全是为了弥补它老大shared_ptr天生有缺...
    99+
    2024-04-02
  • C++11智能指针unique_ptr用法使用场景分析
    一、概述 C++ 标准模板库 STL(Standard Template Library) 一共给我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr...
    99+
    2024-04-02
  • C语言指针应用实例分析
    这篇文章主要讲解了“C语言指针应用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言指针应用实例分析”吧!1、指针是什么指针理解的2个要点:平时口语中说的指针,通常指的是指针变量,...
    99+
    2023-06-30
  • C语言指针运算实例分析
    这篇文章主要介绍“C语言指针运算实例分析”,在日常操作中,相信很多人在C语言指针运算实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指针运算实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-30
  • C语言指针使用实例分析
    今天小编给大家分享一下C语言指针使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。何为指针指针这玩意说白了,就是用来...
    99+
    2023-07-02
  • C++SmartPointer智能指针详解
    目录一、为啥使用智能指针呢二、shared_ptr智能指针三、unique_ptr智能指针四、weak_ptr智能指针五、智能指针怎么解决交叉引用,造成的内存泄漏5.1 交叉引用的栗...
    99+
    2024-04-02
  • 【C++】智能指针(RAII)详解
        我们在上篇文章中(异常处理详解)提到了 RAII 。那么本篇文章会对此进行详解。重点是智能指针的详解。其中会讲解到 RAII 思想、auto_ptr、unique_ptr、shared_ptr、weak_ptr、循环引用问题。希...
    99+
    2023-09-06
    c++ 开发语言
  • C++ 智能指针:提升代码安全性和可靠性
    智能指针是 c++++ 中管理内存的工具,通过自动释放对象,提升代码安全性。有三种智能指针类型:unique_ptr (独占所有权)、shared_ptr (共享所有权) 和 weak_...
    99+
    2024-05-09
    c++ 智能指针 作用域 标准库
  • C#中指针的示例分析
    这篇文章将为大家详细讲解有关C#中指针的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、简洁优美的代码本来初稿这节写了好几百字,将C#指针开发与C/C++开发,Java开发、D语言开发等进行对比...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作