所谓智能指针指的是一种用起来像指针但又无需关心内存管理的一种机制。
普通指针的问题
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释放内存
答案是肯定的。
让指针更智能
指针本质上就是一个内存地址,因此普通指针根本就无法分辨什么时候该指针指向的内存使用完毕,
普通指针需要更聪明一点。
什么情况下一块内存就可以释放掉了? 很简单,没人使用的时候就可以释放掉了。那么该怎么知道有没有人在使用一块内存?答案同样很简单,只需要记个数