static GameData *instance = NULL;
GameData* GameData::getInstance()
{
if (instance)
{
return instance;
}
GameData *pRet = new GameData();
if (pRet&&pRet->init())
{
pRet->autorelease();
instance = pRet;
return pRet;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}
return NULL;
}
```
这是我写的一个用来的存储数据的单例的外部调用接口,该类有一个CCArray* 的成员变量,定义如下:
public:
CCArray *pHeroArray; // data of every hero
```
第一次完成创建单例后,给该数组赋值,保存数据成功。然后在切换游戏场景后,再次调用该单例的静态函数后,发现指针没变,但是内部成员变量,数组已经变为空了。
这个可能是怎么回事?
好久没写过c++代码了,应该给pHeroArray申请空间的,可以写个set方法,然后实例化pHeroArray并赋值为你传递来的变量。你直接赋值不行的吧,这个数组指针是自动释放的。
pRet调用autorelease以后,在函数结束的时候会被释放,所以之后指针虽然还在,但是所指向的内存内容已经发生变化了。对于单例,如果是通过new创建的,不应该调用autorelease,如果是通过CREATE_FUNC类似的方法创建的,则需要调用retain()来增加引用数,以保证其引用数大于0,然后在适当的时候再手动释放。
感觉可能是数组占用的内存被释放了,但是我按照你说的不调用autorelease,或者调用retain(),好像还是不行,内存还是被释放掉了啊?
我找到原因了,因为数组本身也需要加上retain(),找的好辛苦啊!谢谢了
LZ 你是怎么解决的?
我用了 retain() 也不行。。
求回复,谢。。