如何实现一个简单的智能指针

所谓智能指针指的是一种用起来像指针但又无需关心内存管理的一种机制。

 

普通指针的问题

C/C++中指针极为常见,但普通指针最大的问题就在于需要程序员记住分配内存后要手动释放,否则就会有内存泄漏或者引用野指针的风险。

比如有这样一个简单的类:

class person {
public:
    person() {}
    ~person(){ cout<<"delete person."<<endl; }
    void display(){
        cout<<"This is person"<<endl;
    }
};

如果在堆上分配该对象的话,那么在使用完后必须调用delete释放内存:

person* p = new person();
...
delete p; //使用完后手动释放内存

那么有没有一种更好的机制来自动管理在堆上分配的对象呢?像下面这样:

smart_pointer p(new person());
p->display();
// 无需手动调用delete释放内存

答案是肯定的。

 

让指针更智能

指针本质上就是一个内存地址,因此普通指针根本就无法分辨什么时候该指针指向的内存使用完毕

普通指针需要更聪明一点。

什么情况下一块内存就可以释放掉了? 很简单,没人使用的时候就可以释放掉了。那么该怎么知道有没有人在使用一块内存?答案同样很简单,只需要记个数

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值