Riordon

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

引言: 当两个对象(通常这样的对象包含指针对象)指向同一块区域时,若同时对这块区域delete两次,则会出现灾难性错误。

类定义:

View Code
 1 class CHasPtr
 2 {
 3 public:
 4     CHasPtr(void);
 5     CHasPtr(T Tval, T *pTval);
 6     CHasPtr(CHasPtr& rObj);
 7     CHasPtr& operator=(CHasPtr& rObj);
 8  public:
 9     ~CHasPtr(void);
10 
11 private:
12     T m_Tval;
13      T *m_pTval;
14 };

方案一:

有人会说,这不是很简单,直接在本类上加上一个计数的成员变量不就得了.然而你只考虑到了远远不足:

但出现这样的调用时:

CHasPtr p1(...);

CHasPtr p2(p1);

CHasPtr p3(p1);

怎么更新p2、p3的计数值呢?p3可以通过p1,而p2怎么更新?

方案二:

View Code
1 class CU_Ptr
2 {
3     friend class CHasPtr<T>;
4     CU_Ptr(T *pTval);
5     ~CU_Ptr(void);
6     
7     int m_nUse;
8     T *pTval;
9 };

详情见http://www.cnblogs.com/riordon/archive/2013/04/24/3041034.html

使用智能指针类可以解决此问题

posted on 2013-04-25 08:56  Riordon  阅读(120)  评论(0)    收藏  举报