2013-05-02 32 views
0

我正在C++中製作Bubble Pop遊戲,用戶點擊隨機生成的Bubbles浮動屏幕(仍在開發中)。爲了在這個遊戲中使用OpenGl和Glut,我發現最好讓我的Bubbles全球化。我有一個空白的析構函數,但我不知道如何刪除Bubble的內容並創建一個新的。我嘗試使用動態分配,但沒有什麼區別。我如何刪除Bubble的內容並製作一個新的?刪除遊戲中的全局對象(C++)

這裏有一個必要的片段:main.cpp中

Bubble myBubble1; void display(void) { 
delete myBubble1;//error "cannot delete type Bubble" 
} 

我的析構函數是在這裏:

class Bubble { 
    public: 
//default constructor 

Bubble() 
{ 

    radius=(rand() % 100)+1; 
    speed = rand() % 500 ; 
    xVal = rand() % 480; 
    yVal= -14; 
    isLive=true; 

} 
~Bubble() 
{ 

} 
private: 

float radius; 
float speed; 
float xVal; 
float yVal; 
bool isLive; 
}; 

的代碼運行正常,當我不嘗試刪除任何東西。我可以運行無限循環泡泡

+0

作爲一種幫助記憶的方法:任何時候你使用'new',你都應該有一個相應的'delete'。如果你從不使用'new',你沒有什麼可以手動刪除的*。查看像http://stackoverflow.com/q/716353/1751715這樣的問題,它的重複以獲取更多信息。注: 〜每一次刪除必須在它自己的'delete thingy;'行。你不能寫'delete thing1,thing2,thing3;';請參閱http://stackoverflow.com/q/3037655/1751715。 – Hydronium 2013-05-02 12:14:22

回答

0

你沒有在你的Bubble中使用任何指針,所以你的析構函數可以保持空白。如果要重新分配你Bubble只是讓

Bubble myBubble1; 
//use myBubble1 
... 
myBubble1 = Bubble(); 
0

如果你在這樣一個範圍內聲明Bubble

void func() 
{ 
    Bubble b; 
} 

退出func()的範圍後它會被立即銷燬。 (RAII)

你需要使用delete唯一的一次,當你爲一個Bubble手動分配內存,你只能做這一個指針:

void func() 
{ 
    Bubble* b = new Bubble; 

    delete b; 
} 

如果你想刪除它將它聲明爲一個指針(像std::unique_ptr這樣的智能指針是首選)並隨意刪除。 (或smartPointer.reset()