C++利用引用技术和智能指针可以实现对堆内存的自动管理,当智能指针退出生命周期时,会减小管理对象的引用计数,当对象引用计数为0时,便释放该堆内存资源。看上去这一技术很不错,堆内存有生命周期了,不用手动释放了。实时上智能指针任然存在危险,下面就是一个例子。 class A; class A class B ... 上述代码中的insA和insB指向的内存似乎在两个智能指针退出生命周期后会自动释放掉,实际上不然,假如insA先退出生命周期,insA->refCount减1,insA->refCount == 1;insA不会释放,于是有insB->refCount == 2;然后insB退出生命周期,insB->refCount--,insB->refCount == 1;insB为释放,此时已经没有时机释放insA和insB了,于是内存泄漏。 |
C++中智能指针循环指向的陷阱
最新推荐文章于 2024-03-28 18:04:27 发布