2010-05-24 32 views
1

我使用this sample解碼/編碼的一些數據,我檢索/從/到Web服務器發送的,我想用這樣的:我應該在這段代碼中調用類析構函數嗎?

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嗎? 刪除是否釋放base64使用的所有內容?

回答

3

base64在本地存儲。它超出了範圍,並在塊的末尾被破壞。剩下的唯一問題是temp的所有權。如果它的內存歸base64所有,那麼你不需要delete任何東西。

1

否,base64是堆棧分配和由decode()返回的指針是到一個數組它是類的一個數據成員:

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

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

dst將被自動解除分配時Base64實例超出範圍。

4

Base64的析構函數會自動執行。由於Base64存在於堆棧中,所以會調用析構函數。您不需要手動釋放此代碼中的任何資源,除了可能的「temp」。但是,您需要檢查Base64文檔。

0

base64被分配到堆棧上,一旦它離開作用域就會被銷燬。這裏沒有必要delete什麼。

2

base64將在上下文結束時自動刪除。你不能刪除它(如果你刪除& base64小貓將死亡)。

base64的析構函數應該刪除它不再需要的所有東西。關於溫度,它取決於lib。你必須檢查文檔。

+0

+1甚至只爲「小貓將死」:D – 2010-05-24 19:12:47

相關問題