2014-03-28 1 views
0
class Levels{ 
    public: 
       Levels(); 
       Player* one; 
       Player* two; 
       Player* three; 
       Player* four; 
       void reset(); 
} 

Levels::Levels() 
{ 
    one = new Player(...); 
    two= new Player(...); 
    three= new Player(...); 
    four= new Player(...); 
} 

void Levels::reset() 
{ 
    delete one; 
    delete two; 
    delete three; 
    delete four; 
    one = new Player(...); 
    two= new Player(...); 
    three= new Player(...); 
    four= new Player(...); 
} 

기본적으로 리셋에서는 이전 플레이어를 삭제하고 다시 새로 만듭니다. 그것은 작동하지만 괜찮은지 나는 모른다.메모리 누수가 있습니까? 클래스 유형의 클래스 멤버를 재설정하려고합니다. C++

+0

C++입니까? 언어 태그를 추가하십시오. –

+0

@Yu_Hao 예 C++입니다. – fuzymarshmello

답변

0

게시 한 코드가 메모리를 누설하지 않습니다. 레벨을 복사하면 어떻게됩니까? 복사본 생성자 등이 없으면 누수됩니다. 소멸자가 있습니까?

std::unique_ptr<Player>과 같은 스마트 포인터를 사용하지 않는 이유는 무엇입니까? 이렇게하면 재설정되거나 파괴 될 때 오래된 플레이어가 자동으로 삭제됩니다.

+0

스마트 포인터에 대해 들어 봤지만 사용하지는 않았습니다. 모든 단일 포인터에서 사용해야합니까? 아니면 그 멍청한가? 그들은 C++ 11만을위한 것입니까? – fuzymarshmello

+0

모든 포인터에서 사용할 필요는 없지만 너무 많으면 충분하지 않은 것이 좋습니다. C++ 11은 두 가지 유용한 스마트 포인터 (unique_ptr 및 shared_ptr)를 표준화합니다. 그 전에는 컴파일러가 포함되어 있거나 라이브러리가 필요한 경우 컴파일러에 따라 다릅니다. (auto_ptr만이 유용하지는 않습니다.) –

+0

@ fuzymarshmello 당신은 포인터를 소유하고있는 모든 포인터 (포인터를 가리키는 포인터)에 사용하거나 RAII를 일반적으로 사용하여 깨끗하고 쉽게 할 수 있습니다. RAII wikipedia 페이지와 다른 관련 문서를보십시오. – Klaim

관련 문제