zoukankan      html  css  js  c++  java
  • std::shared_ptr

    /*auto_ptr:会发生语义转移,不支持应用计数
    scoped_ptr:不支持复制,只有自己可以管理指针
    scoped_array:支持数组
    shared_ptr:最好的智能指针,支持引用计数,容器操作等,复制指针时引用计数加一,当复制的对象析构时引用计数减1,当引用计数为0是析构对象
    */
    
    #include <memory>
    #include <iostream>
    using namespace std;
    class shared
    {
    private:
        shared_ptr<int> p;
    public:
        shared(shared_ptr<int> _p):p(_p){}
        void print()
        {
            cout << "count:" << p.use_count() << "v = " << *p << endl; 
        }
    };
    
    void print_func(shared_ptr<int> p)
    {
        cout << "count:" << p.use_count() << "v = " << *p << endl; 
    }//退出函数时,p自动析构,引用计数减1
    
    int main()
    {
        shared_ptr<int> p(new int(100));
        shared s1(p);
        {
            shared s2(p);
            s2.print();//3
        }
        s1.print();//2
        *p = 20;
        print_func(p);//3
        s1.print();//2
        getchar();
    }
    //我一直想知道shared_ptr和auto_ptr什么区别,现在总算清楚了
  • 相关阅读:
    排序
    Apache架设Web服务器
    函数调用规范
    linux启动流程
    Make工程管理器
    网络相关知识
    数字电路中的建立时间与保持时间
    面试碰到的技术题
    嵌入式linux的驱动程序
    EF实体中的修改
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3802714.html
Copyright © 2011-2022 走看看