2013-05-02 3 views
0

나는 C++로 버블 팝 게임을 만들고 있는데, 사용자가 화면에서 떠오르는 무작위로 생성 된 버블을 클릭한다. 이 게임에서 OpenGl과 Glut을 사용하기 위해서 나는 나의 거품을 세계화시키는 것이 최선이라는 것을 발견했습니다. 빈 소멸자가 있지만 버블의 내용을 삭제하고 새 버프를 만드는 방법을 모르겠습니다. 나는 동적 인 할당을 사용했다. 그러나 그것은 차이를 만들지 않았다. 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와 같은 질문을 참조하십시오. 자세한 내용은 중복되어 있습니다. N.B. ~ 모든 삭제는 자신의'delete thingy;'줄에 있어야합니다. 'delete thing1, thing2, thing3;';을 쓸 수 없습니다. http://stackoverflow.com/q/3037655/1751715를 참조하십시오. – Hydronium

답변

0

소멸자가 비워 둘 수 없도록 Bubble에 포인터가 사용되지 않습니다. 다시 할당 할 경우 Bubble 너무

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

이 같은 범위에 Bubble를 선언하는 경우 : 당신이 func()의 범위를 종료 한 후

void func() 
{ 
    Bubble b; 
} 

즉시 파괴됩니다. (RAII)는

당신이 delete를 사용할 필요가있는 유일한 시간은 수동으로 Bubble를위한 메모리를 할당하고 당신은 포인터로이 작업을 수행 할 수있을 때이다 : 당신이 그것을 삭제하려면

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

    delete b; 
} 

포인터로 선언하고 (std::unique_ptr과 같은 스마트 포인터) 원하는대로 삭제합니다. (또는 smartPointer.reset())