Когда полагаться на сборку мусора, а когда нет? - PullRequest
0 голосов
/ 05 октября 2010

Если я собираюсь выполнить такую ​​операцию много раз:

  res = mysql_perform_query(conn, "show tables");

  printf("MySQL Tables in mysql database:\n");
  while ((row = mysql_fetch_row(res)) !=NULL)
      printf("%s\n", row[0]);

Нужно ли запускать mysql_free_result(res); в конце каждой операции или полагаться на механизм сбора мусора, почему?

ОБНОВЛЕНИЕ

Я до сих пор не понимаю, как судить о необходимости очистки некоторой структуры данных в соответствии с существующим ответом.

1 Ответ

2 голосов
/ 05 октября 2010

В C ++ никогда.C ++ не является сборщиком мусора.Ближайшим будет RAII , который в основном обертывает вещи, которые нуждаются в очистке, в объекты, которые выполняют очистку в своем деструкторе.Я не могу вдаваться в подробности, так как на самом деле я не очень много использую C ++.

В качестве отступления: даже на языке GC GC хорошо работает только для памяти.Явная очистка все еще необходима для таких вещей, как соединения SQL, файловые дескрипторы и т. Д.

Итог: Вы всегда должны очистить, как только закончите. (Если в документации не говорится, что это не нужно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...