C++中智能指针循环指向的陷阱
来源:互联网 发布:类似于硕鼠的软件 编辑:程序博客网 时间:2024/05/16 14:18
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++:指向数组的智能指针scoped_array组件的使用
- c 指向指针的指针
- C 指向指针的指针
- C语言中二维数组、二维指针、指向指针的数组、指向数组的指针
- 4、C语言中 指向指针变量的指针变量
- C陷阱中--函数指针
- COM智能指针(Smart Pointer)的陷阱
- 没有躲过的坑--智能指针陷阱
- C指针---指向指针的指针(转)
- c语言指针,指向指针的指针
- C指针传递,指向指针的指针。
- 【C++】指针(5):指向指针的指针
- 智能指针陷阱
- c 指向函数的指针
- 指向对象的指针【c++】
- 【C++】指向类的指针
- oracle linux配置X manager和VNC-Linux
- 疯狂代码,大型网站架构系列 转贴
- 【IT系列之3】IT公司的三使命和五步走
- C# 无法识别的转义序列
- 三位前美林高管曾试图买回公司-《金融时报》
- C++中智能指针循环指向的陷阱
- 网络广告销售混乱 电脑病毒乘虚而入
- 机器字节存储顺序
- 开始写博客,坚持!
- proj4简介和简单用法
- Link Android Source Code to Eclipse
- 筐子的历史——java泛型机制学习笔记(一)
- 各种工具之正则表达式语法比较
- 新加坡再保险前高管职场经验谈