Безопасен ли поток std::ostringstream для Embarcadero C++ Builder XE4?
У меня есть приложение, которое выдает исключения, когда моя программа завершается. У меня есть следующая служебная функция в заголовочном файле для преобразования числовых типов в 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, которая делает это небезопасным?