Портативный эквивалент gcc's __ приписывает __ (очистка)

4 ответа

В C. нет переносимого способа.

К счастью, это стандартная функция C ++ с деструкторами.

Изменить:

MSVC, похоже, имеет ключевые слова __try и __finally, которые можно использовать для этой же цели. Это отличается от обработки исключений C ++, и я думаю , что она доступна в C.

Я думаю, вы обнаружите, что очистка и try / finally не широко используются специально из-за неявной поддержки в C ++ , который «достаточно близок» к C, чтобы люди, заинтересованные в его поведении, могли легко переключить свой код на C ++.

8
ответ дан 1 December 2019 в 05:23
поделиться
void foo()
{
        char *buf1 = 0, *buf2 = 0, *buf3 = 0;
        /** more resource handle */

        do {

                if ( buf1 = ... , !buf1 ) break;
                if ( buf2 = ... , !buf2 ) break;
                if ( buf3 = ... , !buf3 ) break;

                /** to acquire more resource */

                /** to do with resource */

        } while (0);

        /** to release more resource */

        if (buf3) free(buf3);
        if (buf2) free(buf2);
        if (buf1) free(buf1);
}
-3
ответ дан 1 December 2019 в 05:23
поделиться

Для этой цели можно использовать boost :: shared_ptr.

boost::shared_ptr<char> buffer(p, cleanup);
-6
ответ дан 1 December 2019 в 05:23
поделиться

Первая половина вашего вопроса - это портативный способ сделать это.

5
ответ дан 1 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: