2010-05-24 2 views
1

내가/검색하는 웹 서버에 /로부터 전송하고 일부 데이터를 인코딩/디코딩 this sample를 사용하고, 나는 이런 식으로 사용하려는 :이 코드에서 클래스 소멸자를 호출해야합니까?

BOOL HandleMessage(UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT* r) 
{ 
    if(uMsg == WM_DESTROY) 
    { 
    PostQuitMessage(0); 
    return TRUE; 
    } 
    else if(uMsg == WM_CREATE) 
    { 
    // Start timer 
    StartTimer(); 
    return TRUE; 
    } 
    else if(uMsg == WM_TIMER) 
    { 
    //get data from server 
    char * test = "test data"; 
    Base64 base64; 
    char *temp = base64.decode(test); 
    MessageBox(TEXT(temp), 0, 0); 
    } 
} 

타이머는 5 분마다 설정됩니다.

끝에 base64를 삭제해야합니까? delete는 base64에서 사용되는 모든 것을 할당 해제합니까?

답변

3

base64는 로컬 저장소에 있습니다. 범위를 벗어나 블록 끝에서 파괴됩니다. 남은 유일한 질문은 소유권이 temp 인 것입니다. 메모리가 base64에 의해 소유되고 있다면 delete은 필요하지 않습니다.

1

없음은 base64 스택 할당되고 decode() 의해 리턴 된 포인터는 클래스의 데이터 멤버 인 배열이며 다음 Base64 인스턴스가 범위를 벗어나면

class Base64 { 
    // ... 
    char dst[MAX_LEN]; 
}; 

char* Base64::decode(char *src) { 
    // ... 
    return dst; 
} 

dst 자동 해제 될 .

4

Base64의 소멸자가 자동으로 처리합니다. Base64가 스택에 있기 때문에 소멸자가 호출됩니다. "temp"를 제외하고이 코드에서 수동으로 자원을 해제 할 필요는 없습니다. 그러나이를 확인하려면 Base64 문서를 확인해야합니다.

0

base64는 스택에 할당되며 범위를 벗어나면 즉시 파괴됩니다. 여기에 delete은 필요 없습니다.

2

base64는 컨텍스트의 끝에서 자동으로 삭제됩니다. 삭제할 수 없습니다 (& base64 새끼 고양이가 죽을 경우).

base64의 소멸자는 더 이상 필요없는 모든 것을 삭제해야합니다. 온도에 관해서는 lib에 달려있다. 문서를 확인해야합니다.

+0

"고양이는 죽을 것입니다." –

관련 문제