关于carray的行为
About behavior of CCArray
我有一个关于CCArray的问题。我写的代码如下:
h.file
class GameScene : public cocos2d::CCLayer{
public:
CCArray *arrayA;
CCArray *arrayB;
void funcA();
void funcB();
CREATE_FUNC(GameScene);
}
cpp.file
void GameScene::funcA()
{
arrayA = new CCArray;
arrayB = new CCArray;
//---------------About arrayA-------------------------
CCDictionary *plist = CCDictionnary::createWithContentsOfFile("Data.plist");
arrayA = (CCArray*) plist->objectForKey("fruit");
CCLog("size of arrayA is %d ",arrayA->count() ); //ok (size = 3)
//---------------About arrayB-------------------------
CCSprite *obj =CCSprite::create("sample.png");
arrayB->addobject(obj);
CCLog("size of arrayB is %d ",arrayB->count() ); //ok (size = 1)
funcB();
}
void GameScene::funcB()
{
CCLog("size of arrayA is %d ",arrayA->count() ); // appear the error (size = 102938312)
CCLog("size of arrayB is %d ",arrayB->count() ); // ok (size = 1)
}
Data.plist详细信息
<plist version="1.0">
<dict>
<key>fruit</key>
<array>
<string>apple</string>
<string>orange</string>
<string>strawberry</string>
</array>
</dict>
</plist>
在funcA中,我声明了CCArrayA和CCArrayB。我用不同的方式给每个数组添加了一个对象
接下来,每个数组使用CCLog显示每个数组的大小,然后数组都不出现或错误。
但是,在函数B中,虽然arrayB没有像funcA的时间一样改变大小,但arrayA将大小改变为一个奇怪的值
为什么会发生这样的事情?在逃离funcA时,可能会释放CCArrayA ?
在这种情况下,我应该做些什么来阻止CCArrayA释放?
如果你从plist文件中获得数组,那么你不需要使用new操作符创建它。只要赋值给CCArray*的成员指针,如果你想在所有成员函数中访问它,那么你必须在赋值后保留它。否则,当控制超出功能时,它将被释放并抛出异常或成为垃圾。
相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 关于std::move的使用,是否有编译警告
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 关于C++中具有多重继承"this"指针的说明
- 关于 c++ 函数中指针赋值的简单问题
- 关于 std::min, std::max 中的比较运算符的混淆
- 这是关于成员访问规则的正确摘要吗
- C++ 关于指针取消引用的技术问题
- std::is_trivially_copyable_v 关于虚拟功能
- 关于指向指针数组的指针
- 关于复制构造函数的一个棘手问题
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 关于类的 Python 文档 - 对C++的引用不正确
- 关于 C++ 中的函数类型定义
- 关于条件块的问题与&&运算符有关
- 关于如何使用指向主窗口的指针的 QT 问题
- 关于carray的行为