У меня есть приложение, которое выдает исключения, когда моя программа завершается. У меня есть следующая служебная функция в заголовочном файле для преобразования числовых типов в std::strings
что я использую, чтобы избежать засорения моего кода std::ostringstream
экземпляры
namespace MyUtils {
template <typename T>
std::string NumericToString(const T& value)
{
std::string str_retval = "";
try
{
std::ostringstream ost;
ost << value;
str_retval = ost.str();
}
catch (std::exception& e)
{
str_retval = "?";
}
return str_retval;
}
}
Теперь этот код вызывается из нескольких потоков и вызывается часто, и иногда он вызывает исключение нарушения доступа глубоко внутри реализации ostringstream. Из того, что я вижу в этом коде, я не вижу очевидных причин, по которым он не является поточно-ориентированным.
Я использую идентичную функцию в других приложениях, которые разрабатываю специально для Linux (g ++ 4.6.3), и я никогда не видел броска кода.
Я знаю, что безопасность потоков внутри стандартной библиотеки никогда не следует предполагать, но моя функция довольно проста. Мое приложение построено как 64-битное приложение, поэтому оно использует компилятор C ++ 11, который поставляется с этой версией XE4.
Может кто-нибудь сказать мне, если есть какая-либо причина, почему моя вышеупомянутая функция небезопасна, или действительно, если есть какие-либо известные проблемы с реализацией стандартной библиотеки Embarcadero C ++ Builder XE4, которая делает это небезопасным?
Задача ещё не решена.