Безопасен ли поток 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, которая делает это небезопасным?

0 ответов

Другие вопросы по тегам