E>>А в то, что состояние структуры "все поля 0" может требовать что-то ещё освобоить я не верю sts>Ну, для файлов скажем это не 0, а -1.
Значит, потребуется явная инициализация не-нулём.
sts>А дальше можно отправиться к примеру в man pthread_spin_init и там прочитать: sts>
sts> If the pthread_spin_init(pthread_spinlock_t *lock) function fails, the lock is not initialized and the contents of lock are undefined.
sts>Понаписали вот. Теперь мучайся
На это надо заводить отдельную переменную типа lock_inited. Поставить её в 0 в общем начале и в 1 при успешной инициализации, мягко говоря, не проблема (по сравнению с общей задачей)
Здравствуйте, igna, Вы писали:
I>То есть твое "в С типов нет" было не по делу?
То есть не можешь что-то сказать по теме топика? -- не флуди...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: [PURE C] Почему замена RAII, а не реализация???
Здравствуйте, sts, Вы писали:
sts>>>Мне эти подходы не особо нравятся. E>>А чем goto error_N плох?
sts>как минимум при изменениях кода едет нумерация меток. sts>да и витиевато выходит.
А! Понял. Обычно в рамках этого подхода меткам стараются давать осмысленные названия. Типа там "выход после того", "выход после сего".
А если не могут, то нумеруют, но номера никакого смысла не имеют. Номера могут идти в любом поряке...
sts>тут уже предложили ++stage с последующим switch (stage) для решения этой проблемы. sts>но, кажется, при этом становится еще витиеватее
IMHO это ожнозначно хуже.
Тогда уж лучше завести слово битов и взводить биты, соответствующие тем переменным, которые уже построены...
А эти ++ -- это одноначно дорога в ад.
E>>>>Но если вы жить не можете без RAII, ну заведите себе RAII!
sts>кто только их не понаписал за 40-то лет.
sts>Ну, для файлов скажем это не 0, а -1.
Ну и что? sts>Понаписали вот. Теперь мучайся
Ну флажок рядом клади...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>То есть не можешь что-то сказать по теме топика? -- не флуди...
Спрашивающему-то я ответил подробно. А пройти мимо, когда говорят неправду, можно конечно, но в данном случае не нужно. Что это тебя так заело? Ну сказал глупость, ну поправили тебя, так на то и форум.
я бы для каждой структуры написал пару foo_ctor/foo_dtor.
внутри можно четко проинициализировать, проверить и освободить.
еще вариант с goto хорош. вот только никаких stages, только именные метки.
Здравствуйте, Константин Л., Вы писали:
КЛ>Здравствуйте, sts, Вы писали:
КЛ>[]
КЛ>давно ничего не писал сюда.
КЛ>я бы для каждой структуры написал пару foo_ctor/foo_dtor. КЛ>внутри можно четко проинициализировать, проверить и освободить. КЛ>еще вариант с goto хорош. вот только никаких stages, только именные метки.
Прижилось разделение кода функции на 2 части — которя выделяет-удаляет ресурсы и вызывает функцию реализующую алгоритм передавая ей готовые ресурсы в параметрах. С именными метками тоже не очень получается, пока рулят флажки xxx_initialized и goto на единственную метку где эти флажки проверяются.
А вообще получается, что единый поход (кроме своего RAII, как в YOYO) выработать сложно. В каждом конкретном случае свой подход рулит.