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

本文介绍了C++中的智能指针,探讨了普通指针存在的内存管理问题,并提出了通过引用计数来实现智能指针的概念。文章详细解释了如何通过引用计数来自动管理内存,包括智能指针的构造、析构、赋值和操作符重载。最后,作者给出了一个简单的智能指针使用示例,并鼓励读者在实际项目中使用标准库提供的智能指针。

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

 

普通指针的问题

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释放内存

答案是肯定的。

 

让指针更智能

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

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

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

不知道大家去游乐园公园之类园区时有没有注意过,这些地方通常会显示园区里现在有多少人,有人进去这个数字就加1,有人出来这个数字就减一,什么时候管理员就可以关门了?当然是园区里没人的时候。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值