智能指针在C++里大致意思就是 一个对象包含了一个成员指针,当对象不存在时指针所指向的内存也会释放。这也是自动垃圾回收的一个机制。sp 不是智能指针的意思,这里是强引用。wp 弱引用。
这里网上找了几个例子:
Template
<typename T>
class
SmartPtr{
public:
SmartPtr(T
*p = 0):ptr(p){}
~SmartPtr(){delete ptr ;}
private:
T
*ptr ;
};
通过上面的封装,我们就可以用下面的方式来使用SmartPtr
而不需要担心内存泄露的问题: SmartPtr<int>
pointer(new int) ;
*(pointer.ptr)
= 10 ;
为了方便使用,我们可以对操作符进行重载,让智能指针的操作更像是指针: T
&operator*(){return *ptr}
T*
operator->(){return ptr}
同时会担心
同一个指针被delete
两次,所以这里也会加一个引用计数,这样一个sp就可以了。
android
里面还出现了wp
这个指针类,实际上他是一个弱引用类型的指针类,弱引用是在.net
以及java
中经常用到的,弱引用是一个对象引用的持有者,使用弱引用后可以维持对对象的引用,但是不会阻止其被垃圾回收。如果一个对象只有弱引用了,那它就成为被垃圾回收的候选对象,就像没有剩余的引用一样,而且一旦对象被删除,所有的弱引用也会被清楚。弱引用适合那些数据
成员特别多,而且重新创建又相对容易的类,也就是俗称的胖子类,建立弱引用可以引用对象,但也不阻止其被垃圾回收,在内存的使用方面取得一定的平衡。