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
      一个指针对象指向一片内存空间,不能拷贝构造和赋值

  • 相关阅读:
    桟错误分析方法
    gstreamer调试命令
    sqlite的事务和锁,很透彻的讲解 【转】
    严重: Exception starting filter struts2 java.lang.NullPointerException (转载)
    eclipse 快捷键
    POJ 1099 Square Ice
    HDU 1013 Digital Roots
    HDU 1087 Super Jumping! Jumping! Jumping!(动态规划)
    HDU 1159 Common Subsequence
    HDU 1069 Monkey and Banana(动态规划)
  • 原文地址:https://www.cnblogs.com/-glb/p/12007010.html
Copyright © 2011-2022 走看看