LINUX.ORG.RU

Вопрос про подсчёт ссылок в GLib


0

0

Вот два примера кода из GLib:

GMainContext *
g_main_context_ref (GMainContext *context)
{
g_return_val_if_fail (context != NULL, NULL);
g_return_val_if_fail (g_atomic_int_get (&context->ref_count) > 0, NULL);

g_atomic_int_inc (&context->ref_count);

return context;
}


void
g_main_context_unref (GMainContext *context)
{
GSource *source;
g_return_if_fail (context != NULL);
g_return_if_fail (g_atomic_int_get (&context->ref_count) > 0);

if (!g_atomic_int_dec_and_test (&context->ref_count))
return;

/* ... */
}

Внимание, вопрос: зачем перед инкрементированием и декрементирование счётчика ссылок выполняется его проверка на 0?

anonymous

Просто защита от дурака. Вроде assert'ов. Больше никакого смысла этот код не имеет, если проверка не выполнится, будет выдан warning на консоль. Чтобы случайно не начать выполнять этот код, если что-то идет не так.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.