c++智能指针详解
2015-01-03 13:35
459 查看
</pre>指针在c++中可以说用的相当广泛,但是在管理指针的时候会经常出现一些问题,比如有两个指针同时指向一个对象,而开发者在开发过程中可能会忘了同时有两个指针指向这个对象,于是使用其中一个指针删除该对象,因此会造成另外一个指针指向空对象,导致该指针为悬垂指针。<p></p><p>为了解决这个问题,c++中有两种方法,第一种引入了一种叫智能指针的概念,原理很简单,就是把指向该对象的指针交给一个类进行管理,说白了就是使用一个计数器,当没有指针指向该对象时,计数器为0,当有一个指针指向该对象时,计数器为1,以此类推,当有n个指针指向该对象时,计数器为n,每当增加一个指针指向该指针,计数器就增加1。相反,如果减少一个指针指向该对象,计数器就减1,直到计数器为0时,说明没有指针指向该对象了,这时就可以将该对象删除了。</p><p>第二种是叫做值拷贝,就是在有另外一个指针要指向这个对象的时候,将该对象进行拷贝,因此两个指针相互不影响。</p><p>本文只对第一种进行介绍,如果需要了解第二种的同学,请查阅其他资料。</p><p>原理介绍完了,下面是实现代码:</p><p></p><pre name="code" class="html">#include <iostream> using namespace std; int main(int argc, const char * argv[]) { // insert code here... std::cout << "Hello, World!\n"; return 0; } //使用计数类 class U_Ptr{ public: friend class HasPtr; int *ip; size_t use; U_Ptr(int *p):ip(p),use(1){} ~U_Ptr(){delete ip;} }; class HasPtr{ public: // HasPtr(int *p,int i):ptr(p),val(i){} // int *get_ptr()const {return ptr;} // int get_int()const{return val;} // // void set_ptr(int *p){ptr=p;} // void set_int(int i){val=i;} // // int get_ptr_val()const{return *ptr;} // void set_ptr_val(int val)const{*ptr = val;} //smart point HasPtr(int *p,int i):ptr(new U_Ptr(p)),val(i){} HasPtr(const HasPtr &orig):val(orig.val),ptr(orig.ptr){++ptr->use;} HasPtr& operator=(const HasPtr&); ~HasPtr(){if(--ptr->use==0)delete ptr;} int *get_ptr()const{return ptr->ip;} int get_int()const {return val;} void set_ptr(int *p){ptr->ip=p;} void set_int(int i){val=i;} int get_ptr_val()const {return *ptr->ip;} void set_ptr_val(int i){*ptr->ip=i;} private: U_Ptr *ptr; int val; }; HasPtr& HasPtr::operator=(const HasPtr &rhs){ ++ptr->use; //如果有赋值操作,先将计数器加1 if(--ptr->use==0) delete ptr; ptr=rhs.ptr; val=rhs.val; return *this; }
相关文章推荐
- C++智能指针详解
- 转 C++ 智能指针详解
- [置顶] 从零开始学C++之boost库(一):详解 boost 库智能指针(scoped_ptr<T> 、shared_ptr<T> 、weak_ptr<T> 源码分析)
- C++ 智能指针详解
- C++智能指针使用详解
- C++ 智能指针详解
- C++ 智能指针详解
- C++ 智能指针详解
- C++ 智能指针详解
- C++异常处理 智能指针与MiniDump详解(2)
- C++ 智能指针详解
- C++智能指针详解
- C++ 智能指针详解
- 异常处理与MiniDump详解- (2) 智能指针与C++异常
- C++ 智能指针详解
- c++ 智能指针详解
- C++ 智能指针详解
- C++ - 智能指针(smarter pointer)自定义删除器(deleter) 的方法 详解 及 代码
- C++ 智能指针详解
- C++ 智能指针详解