1

このサンプルを使用して、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分ごとに設定されています。

最後にdelete base64を使用する必要がありますか? 削除すると、base64 で使用されるすべての割り当てが解除されますか?

4

5 に答える 5

4

Base64 のデストラクタが自動的に行います。スタックに Base64 が存在するため、デストラクタが呼び出されます。"temp" を除いて、このコードのリソースを手動で解放する必要はありません。ただし、これについては Base64 のドキュメントを確認する必要があります。

于 2010-05-24T19:09:04.300 に答える
3

base64ローカルストレージにあります。範囲外になり、ブロックの最後で破棄されます。残っている唯一の問題は、の所有権ですtemp。そのメモリが によって所有されている場合は、何もbase64する必要はありませんdelete

于 2010-05-24T19:10:10.677 に答える
2

base64 は、コンテキストの最後で自動的に削除されます。削除することはできません (削除すると &base64 の子猫は死んでしまいます)。

base64 のデストラクタは、不要になったものをすべて削除する必要があります。tempに関しては、libに依存します。ドキュメントを確認する必要があります。

于 2010-05-24T19:10:20.427 に答える
1

いいえ、base64スタックに割り当てられ、によって返されるポインターはdecode()、クラスのデータ メンバーである配列へのポインターです。

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

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

dstBase64インスタンスがスコープ外になると、自動的に割り当てが解除されます。

于 2010-05-24T19:08:07.407 に答える
0

base64 はスタックに割り当てられ、スコープを離れるとすぐに破棄されます。ここでは何もする必要はありませんdelete

于 2010-05-24T19:09:07.747 に答える