zoukankan      html  css  js  c++  java
  • 智能指针类模板(上)——STL中的智能指针

    智能指针类模板
    智能指针本质上就是一个对象,它可以像原生指针那样来使用。

    智能指针的意义
    -现代C++开发库中最重要的类模板之一
    -C++中自动内存管理的主要手段
    -能够在很大程度上避开内存相关的问题

      1.内存泄露,在测试阶段很难发现。造成的原因就是申请堆空间中的内存,忘记释放。 

      2.多次指针释放:一个指针指向了一片堆空间中的内存,这片内存只需要释放一次,如果在代码中不小心释放了多次,后果也是不确定的,有可能程序马上会死掉,有可能程序过一段时间才死掉。

    STL中的智能指针auto_ptr
    -生命周期结束时,销毁指向的内存空间
    -不能指向堆数组,只能指向堆对象(变量)——如果使用堆数组,可以使用上篇博客中的heapArray
    -一片堆空间只属于一个智能指针对象
    -多个智能指针对象不能指向同一片堆空间

     auto_ptr使用初探

    #include <iostream>
    #include <string>
    #include <memory>
    
    using namespace std;
    
    class Test
    {
        string m_name;
    public:
        Test(const char* name)
        {
            cout << "Test(const char* name)" << endl;
            m_name = name;
        }
        void print()
        {
            cout << "I'm" << m_name << endl;
        }
        ~Test()
        {
            cout << "~Test()" << endl;
        }
    };
    
    int main()
    {
        auto_ptr<Test> pt(new Test("hello world") );
        pt->print();
        cout << "pt= " << pt.get() << endl;  //pt.get返回指向的堆空间的起始地址
    
        auto_ptr<Test> pt1(pt);
        pt1->print();
        cout << "pt= " << pt.get() << endl;
        cout << "pt1= " << pt1.get() << endl;
    
        return 0;
    }

    STL中的其它智能指针
    -shared_ptr
      带有引用计数机制,支持多个指针对象指向同一片内存
    -weak_ptr
      配合shared_ptr而引入的一种智能指针

    -unique_ptr
      一个指针对象指向一片内存空间,不能拷贝构造和赋值

  • 相关阅读:
    让程序的性能提升10倍
    以正确的姿势实现一棵JavaScript菜单树
    利用php数组函数进行函数式编程
    yum安装下的nginx,如何添加模块,和添加第三方模块
    前端面试题 vue
    前端常用面试题目及答案-HTML&CSS篇
    使用after伪类,配合IE的zoom或者overflow清除浮动
    函数式编程
    在CentOS 7上安装Node.js
    node中__dirname、__filename、process.cwd()、process.chdir()表示的路径
  • 原文地址:https://www.cnblogs.com/-glb/p/12007010.html
Copyright © 2011-2022 走看看