2012-05-02 6 views
2

우리가 정적 함수를 작성과 함께 simpleTest에 대한 인스턴스를 생성하는 주요 기능에 인스턴스 생성메모리 할당

class simpleTestFactory 
{ 
    public: 
    static simpleTest* Create() 
    { 
     return new simpleTest(); 
    } 
} 

class simpleTest 
{ 
    private: 
    int x,y,z; 
    public: 
    int printTest() 
    { 
     cout<<"\n This test program"; 
    } 
} 

int main() 
{ 

    simpleTest* s1=simpleTestFactory::Create(); 
    . 
    . 
    s1=simpleTestFactory::Create(); 
} 

와 메모리 할당을 설명해주십시오. 다시 같은 객체에 대해 다른 인스턴스를 생성합니다.

이 경우 처음 생성 된 인스턴스 메모리는 삭제됩니까 ??

그렇지 않으면 메모리 문제를 피하는 방법 ??

+0

'shared_ptr'또는 'unique_ptr'과 같은 스마트 포인터를 사용하십시오. – Nick

+0

전체 프로젝트에 대해 단일 인스턴스를 생성해야합니다. 여러 객체에 대해 생성 된 인스턴스 참조를 어떻게 사용할 수 있습니까? – gks

답변

2

이 경우 처음 생성 된 인스턴스 메모리가 삭제됩니까?

아니요, 그렇지 않습니다. delete을 호출하거나 스마트 포인터를 사용하여 직접 할당을 해제해야합니다.

는 (나는 s1이 코드를 ++ 유효 C되지 않습니다 달리, 유형 simpleTest*, 즉 포인터simpleTest의 것을 가정한다.) 당신이 포인터를 전달하는 모든 프로그램의

2

먼저 컴파일되지 않습니다 개체에. 다음과 같아야합니다.

simpleTest *s1 = simpleTestFactory::Create(); 
      ^^^ 

메모리 관리는 C++에서 수동으로 수행해야합니다.

delete s1; // do it before new allocation to s1. 

또한 C++에서 new으로 개체를 만드는 것은 필수 사항이 아닙니다.

simpleTest obj; // automatic object, no explicit deallocation 

[자동 가비지 컬렉션을 위해 당신은 또한 smart pointers 사용할 수 있습니다] :이처럼 간단 할 수있다.

2

싱글 톤 유형 패턴을 시도하십시오. 인스턴스가 아직 작성되지 않은 경우에만 인스턴스를 작성할 수 있습니다. 유스 케이스에 대해 잘 모르겠습니다.

+0

감사합니다. 전체 프로젝트에 대해 단일 인스턴스를 만들고 싶습니다. – gks

0

또한 싱글 톤 패턴은 객체 인스턴스가 삭제된다고 가정합니다. 따라서 특별한 방법을 구현해야합니다.

Thangaraj 질문을 고려할 때 ';' 클래스 정의 후. 예, 삭제 호출을 통해 명시 적으로 객체를 삭제해야합니다. 이를 피하기 위해 스마트 포인터를 사용할 수 있습니다.