引言: 当两个对象(通常这样的对象包含指针对象)指向同一块区域时,若同时对这块区域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
使用智能指针类可以解决此问题
我喜欢一无所有,这样就只能一步一步的创造世界...


浙公网安备 33010602011771号