C/C++:智能指针原理(运算符重载)、使用auto_ptr<A>

智能指针:能够自动释放从堆中申请的资源

原理如下:(实现运算符“*”以及‘->’的重载)

 

1、定义一个类用于狗仔存放数据的对象

class A
{
public:
    A(){
        cout<<"构造函数"<<endl;
    }
    ~A(){
        cout<<"析构函数"<<endl;
    }

    string m_str;     //m_str用于存放字符串
  };

 

2、定义智能指针类

class Pta{
public:
    Pta(A *pa):m_pa(pa){}     //在初始化列表中分配资源,初始化指针A *m_pa
     ~Pta()
    {
        delete m_pa;         //在析构函数中释放资源
     }

    A* operator->(void)const //运算符->重载
     {
        return m_pa;  }      //返回指针

    A& operator*(void)const
    {
        return *m_pa;        //返回引用
      }
    private:
     A *m_pa;
};

 

测试:

int main()
{
//    A *p = new A;
//    p->m_str = "hello";


    Pta pa(new A);
    pa->m_str = "hello";
    cout<<(*pa).m_str<<endl;
       
    
 
    auto_ptr<A> pa(new A);
    pa->m_str = "hello";
    cout<<(*pa).m_str<<endl;

}


注意:智能指针类可以使用auto_ptr< classname> obj(new classname)模板代替

 


 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值