2015-05-29 23 views
0

我在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的构造函数中初始化了b

+0

你不显示,分配或以其他方式在'类A',初始化'B * B'的代码可能是发生问题的地方。目前还不清楚你如何从'B'类型访问数字;据推测,你有这样做的一些方法(因为你需要能够打印数字)。但是根据(未)显示的代码,问题很可能出现在'class A'的构造函数中。 –

回答

0

您不显示相关代码。

一般来说:: create()返回一个指向AutoRelease对象的指针。除非有人先保留(),否则该对象将在下一帧释放。

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

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

(您可以使用插入式智能指针包装,使这一切簿记go away)的

相关问题