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

Why cocos2d-x schedule changed the member object?

本文关键字:成员对象 改变 schedule cocos2d-x 为什么      更新时间:2023-10-16

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

和A对象调用shschedule(schedule_selector(A::callAddNumber), 1.0f);但数目并没有如我所料地增加;似乎在我调度之后,b对象被释放了?b->号码变成了垃圾号码?为什么会发生这种情况?我确信我在A的构造函数中初始化了b

没有显示相关代码。

一般::create()返回一个指向AutoRelease对象的指针。这个对象将在下一帧被释放,除非有人先保留它。

所有从Ref继承的对象都应该在使用retain()/release()策略管理的堆和内存上创建。也就是说,任何想要保持对它们的引用的人都必须在接受引用时调用retain()方法,并在它被销毁或在它释放对象之前记住调用release()方法。

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

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