为什么cocos2d-x schedule改变了成员对象?

时间:2015-05-29 04:00:02

标签: c++ cocos2d-x

我在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

1 个答案:

答案 0 :(得分:0)

您没有显示相关代码。

通常:: create()返回一个指向AutoRelease对象的指针。除非有人首先保留(),否则此对象将在下一帧发布。

预计将在堆上创建从Ref继承的所有对象,并使用retain()/ release()策略管理内存。 那个想要保留对它们的引用的人必须在接受引用时调用方法retain()并记住在它被销毁时或在它释放对象之前调用release()

On :: create()将一个对象添加到autoRelease Queue中。这是一个对象队列,将在下一帧之前释放。所以,除非有人在发生之前调用:: retain(),否则会释放该对象。

(你可以使用一个侵入式智能指针包装器来使所有这些簿记消失)