我正在使用cocos2dx,并对自动释放有疑问。 我有一个sprite调用自动释放方法,之后删除它的精灵,然后我确认了它的精灵的引用计数,值为14.(实际上,它每次都不同)。
为什么发布后的引用计数很有趣?这真的是一个记忆被释放了吗?
↓发布前↓
↓发布后↓
答案 0 :(得分:2)
在大多数引用计数系统中,当您释放对象的引用时,您将无法再信任指针。在多线程环境中即使引用计数"之前"是10,你不能知道"""它是9,因为另一个线程可能同时删除(或添加)引用。
当释放最后一个引用计数时,通常会回收该对象。可能是free
d或delete
d,或者它可能会返回到其他资源管理系统。有时,在等待重复使用时,所使用的对象的内存会被簿记信息覆盖,有时它会在您再次查看之前立即重复使用。
不应该从已经释放引用计数的指针读取或写入。
答案 1 :(得分:0)
当你深入研究代码时,你会发现:
void Ref::release() { // CCRef.cpp
...
if (_referenceCount == 0)
delete this;
...
}
释放后,内存不再是Ref对象。它可以用于定位其他内容,并且可以修改内存的数据。它不是_referenceCount = 14
,可能是0x00ABC0 = 0x0000000E
。