Читая очень хороший пост в блоге Никласа Фрикхольма, на который я ссылаюсь ниже, я наткнулся на что-то, что не совсем могу обернуть голову.
http://bitsquid.blogspot.nl/2012/01/sensible-error-handling-part-1.html
Этот код смутил меня:
__THREAD Array<const char *> *_error_context_name;
__THREAD Array<const char *> *_error_context_data;
Код определяет локальный указатель потока на массив строк, который используется в качестве простого стека. Я не совсем понимаю, как инициализировать и уничтожать массивы кросс-платформенным способом? Также как это работает с границами DLL?
Локальный поток только комментирует, где переменная разрешается в программе. Вам нужно выделить его перед использованием, как и любую другую переменную.
Вы хотели бы сделать это, когда поток начался предпочтительно, для здравомыслия и производительности.
Других решений пока нет …