Обновить
24

Пользователь

5
Подписчики
Отправить сообщение
> А зачем бросила?
Ну, давайте немного упростим ситуацию. Представьте, что вы пишете на языке Си и подключаете к проекту библиотеку написанную на С++. Библиотека эта, предположим, экспортирует функции, помеченные как extern «C», то есть такие функции свободно можно из Си вызывать. Так вот. Теперь представьте, что одна из таких функций бросила исключение. Куда оно попадет? И какие в Си есть возможности для его перехвата?
Пример на Си:
void foo(int (*callback)(char *))
{
char * buffer;
int ret;

buffer = malloc(100000);
ret = callback(buffer);
free(buffer);
}

Если сallback — это функция из С++, то она может бросить исключение. При этом будет утечка памяти, так как buffer не будет освобожден.
Конечно, без крайней необходимости прибегать к такому я бы тоже не стал. Если проектировать систему с нуля, то такие вещи нужно прогнозировать. Однако у меня был уже готовый проект, который нужно было портировать на платформу, где QtXML (именно она и есть та С++ xml-библиотека) не существовало в природе, а был только expat.
12 ...
7

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность