Должен ли я вызвать деструктор класса в этом коде? - PullRequest
1 голос
/ 24 мая 2010

Я использую этот образец для декодирования / кодирования некоторых данных, которые я получаю / отправляю с / на веб-сервер, и я хочу использовать их так:

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?

Ответы [ 5 ]

4 голосов
/ 24 мая 2010

Деструктор Base64 сделает это автоматически.Поскольку Base64 существует в стеке, деструктор будет вызван для вас.Вам не нужно вручную освобождать какие-либо ресурсы в этом коде, кроме, возможно, «temp».Однако для этого вам необходимо проверить документацию Base64.

3 голосов
/ 24 мая 2010

base64 находится в локальном хранилище. Это выходит за рамки и разрушается в конце блока. Единственный оставшийся вопрос - это владение temp. Если его память принадлежит base64, то вам delete ничего не нужно.

2 голосов
/ 24 мая 2010

base64 будет автоматически удалено в конце контекста.Вы не можете удалить его (если вы удалите и котята base64 умрут).

Деструктор base64 должен удалить все, что ему больше не нужно.Что касается temp, это зависит от lib.Вы должны проверить документацию.

1 голос
/ 24 мая 2010

Нет, base64 размещается в стеке, а указатель, возвращаемый decode(), относится к массиву, который является членом данных класса:

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

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

dst будет автоматически освобожден, когда экземпляр Base64 выйдет из области видимости.

0 голосов
/ 24 мая 2010

base64 размещается в стеке и будет уничтожено, как только покинет область видимости.Здесь нет необходимости delete.

...