我在cocos2d-x项目中有这两个类:
class A : public Layer
{
...
B * b;
void callAddNumber(float dt);
}
A::A()
{
b = B::create();
}
void A::callAddNumber(float dt)
{
b->addNumber();
}
class B : public Node
{
...
int number;
B();
void addNumber();
}
B::B()
{
number = 100;
}
void B::addNumber()
{
number += 1;
}
和对象调用shschedule(schedule_selector(A::callAddNumber), 1.0f);
但是数字不会像我预期的那样增加;在我预定之后,b对象会被释放吗? b->数字变成垃圾数?为什么会这样?
我确信我在A&#39的构造函数中初始化了b
。
答案 0 :(得分:0)
您没有显示相关代码。
通常:: create()返回一个指向AutoRelease对象的指针。除非有人首先保留(),否则此对象将在下一帧发布。
预计将在堆上创建从Ref继承的所有对象,并使用retain()/ release()策略管理内存。
那个想要保留对它们的引用的人必须在接受引用时调用方法retain()
并记住在它被销毁时或在它释放对象之前调用release()
。
On :: create()将一个对象添加到autoRelease Queue中。这是一个对象队列,将在下一帧之前释放。所以,除非有人在发生之前调用:: retain(),否则会释放该对象。
(你可以使用一个侵入式智能指针包装器来使所有这些簿记消失)