разница SAFE_RELEASE (), SAFE_DELETE () - PullRequest
1 голос
/ 24 июня 2011

Я новичок в программировании.

Мне интересны функции освобождения и удаления.

Когда я выделяю память новой, я должен прекратить ее с помощью удаления.

Но когда мне следует использовать релиз?

Какая разница, выпуск и удаление ...?

Ответы [ 2 ]

6 голосов
/ 24 июня 2011

Если вы ищете определение, вы обнаружите, что

#define SAFE_RELEASE(p) { if ( (p) ) { (p)->Release(); (p) = 0; } }
#define SAFE_DELETE(a) if( (a) != NULL ) delete (a); (a) = NULL;

SAFE_DELETE следует использовать для памяти, выделенной с новым

SAFE_RELEASE следует вызывать для com-объектов (например, объектов directx) и "под капотом "doind что-то вроде этого

if (--ref_cnt==0)
{
   delete this;
}

уменьшает счетчик ссылок и освобождает объект, если на него больше нет ссылок.

4 голосов
/ 24 июня 2011

C ++ не имеет релиза. Возможно, вы видели это в руководстве, включающем COM +? Понравился DirectX?

Конечно, SAFE_RELEASE и SAFE_DELETE на самом деле не являются частью c ++ и могут быть макросами, определенными в некотором заголовочном файле.

В любом случае, вот правила:

  • delete[] что вы new[]
  • delete что вы new
  • free() что вы malloc() / calloc() / realloc()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...