所谓智能指针指的是一种用起来像指针但又无需关心内存管理的一种机制。
普通指针的问题
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,有人出来这个数字就减一,什么时候管理员就可以关门了?当然是园区里没人的时候。

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

被折叠的 条评论
为什么被折叠?



