Email or username:

Password:

Forgot your password?
Top-level
kurator88

@iliazeus @danilax86 а можешь код показать, давно С не трогал и не понимаю о чем речь

3 comments
iliazeus

@kurator88 @danilax86 что-то вроде:

R* result = ERROR;

A* a = create_a_or_fail();
if (!a) goto cleanup_a;

B* b = create_b_or_fail();
if (!b) goto cleanup_b();

C* c = get_c_or_fail();
if (!c) goto cleanup_c;

result = do_stuff(a, b, c);

cleanup_c:
destroy_c(c);

cleanup_b:
destroy_b(b);

cleanup_a:
destroy_a(a);

return result;

@kurator88 @danilax86 что-то вроде:

R* result = ERROR;

A* a = create_a_or_fail();
if (!a) goto cleanup_a;

B* b = create_b_or_fail();
if (!b) goto cleanup_b();

C* c = get_c_or_fail();
if (!c) goto cleanup_c;

result = do_stuff(a, b, c);

cleanup_c:
destroy_c(c);

cleanup_b:
destroy_b(b);

cleanup_a:
destroy_a(a);

iliazeus

@kurator88 @danilax86 не жди, что этот код без багов, сам на си тоже давно не писал :)

В целом, для корректного сбора ресурсов, который в других языках делают деструкторы или финализаторы или defer. Освободить ресурсы в правильном порядке, при этом без double free и без дублирования кода.

BunnyInAHat

@iliazeus Фигурные скобочки же! А то можно получить классику при достаточном количестве повторений.
imperialviolet.org/2014/02/22/

Go Up