C++中智能指针循环指向的陷阱
2009-06-19 18:12
423 查看
C++利用引用技术和智能指针可以实现对堆内存的自动管理,当智能指针退出生命周期时,会减小管理对象的引用计数,当对象引用计数为0时,便释放该堆内存资源。看上去这一技术很不错,堆内存有生命周期了,不用手动释放了。实时上智能指针任然存在危险,下面就是一个例子。 class A; class B; class A { private: int refCount;// 引用计数,reference count ... public: Ptr<B> pB;// 智能指针,smart pointer }; class B { private: int refCount;// 引用计数,reference count ... public: Ptr<A> pA;// 智能指针,smart pointer }; ... Ptr<A> insA = new A;// insA->refCount = 1 Ptr<B> insB = new B;// insB->refCount = 1 insA->pB = insB;// insA->refCount = 2 insB->pA = insA;// insB->refCount = 2 ... 上述代码中的insA和insB指向的内存似乎在两个智能指针退出生命周期后会自动释放掉,实际上不然,假如insA先退出生命周期,insA->refCount减1,insA->refCount == 1;insA不会释放,于是有insB->refCount == 2;然后insB退出生命周期,insB->refCount--,insB->refCount == 1;insB为释放,此时已经没有时机释放insA和insB了,于是内存泄漏。 |
相关文章推荐
- c++ 智能指针及 循环引用问题
- c++ 智能指针及 循环引用问题
- C++ 智能指针——简单实现以及循环引用问题
- C++ — 智能指针的简单实现以及循环引用问题
- C++ — 智能指针的简单实现以及循环引用问题
- C++智能指针(三):weak_ptr--解决shared_ptr循环引用问题
- C++:指向数组的智能指针scoped_array组件的使用
- 关于c++ 智能指针及 循环引用的问题
- [C++] 智能指针与循环引用
- 【C++】智能指针简述(五):解决循环引用的weak_ptr
- [zz] C++智能指针循环引用解决
- c++ 智能指针及 循环引用问题
- 浅谈C++普通指针和智能指针管理动态内存的陷阱
- c++智能指针循环引用带来的问题及解决方案
- C++智能指针循环引用解决
- c++:分析智能指针shared_ptr存在的循环引用的缺陷
- C/C++外部函数指针指向类内部函数
- 【C++】智能指针简述(三):scoped_ptr
- c++ weak ptr解除指针循环引用。
- C++ 智能指针学习 auto_ptr, unique_ptr 。。。