2015-05-29 24 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)的

相關問題