2010-05-24 50 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

相关问题