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

  • 相关阅读:
    邮件发送工具类
    redis在项目中配置
    搭建zookeeper集群
    activeMQ安装
    solr安装配置中文分词IK
    reids安装
    jdk/tomcat/mysql在linux下安装
    使用poi进行excel导入
    linux 大杂烩
    找包网址
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14321629.html
Copyright © 2011-2022 走看看