我应该在这段代码中调用类析构函数吗?

时间:2010-05-24 19:05:07

标签: c++ visual-c++ delete-operator

我正在使用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吗? delete是否释放base64使用的所有内容?

5 个答案:

答案 0 :(得分:4)

Base64的析构函数会自动完成。由于Base64存在于堆栈中,因此将为您调用析构函数。除了可能的“temp”之外,您无需手动释放此代码中的任何资源。但是,您需要检查Base64文档。

答案 1 :(得分:3)

base64位于本地存储中。它超出范围并在块结束时被破坏。剩下的唯一问题是temp的所有权。如果其内存归base64所有,那么您无需delete任何内容。

答案 2 :(得分:2)

base64将在上下文结束时自动删除。你不能删除它(如果删除& base64小猫将死亡)。

base64的析构函数应该删除它不再需要的所有东西。关于temp,它取决于lib。你必须检查文档。

答案 3 :(得分:1)

不,base64是堆栈分配的,decode()返回的指针是一个数组,该数组是该类的数据成员:

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

char* Base64::decode(char *src) {
    // ...
    return dst;
}
dst实例超出范围时,

Base64将自动解除分配。

答案 4 :(得分:0)

base64在堆栈上分配,一旦离开作用域就会被销毁。这里没有delete任何内容。