2

我有一个应用程序在我的程序终止时抛出异常。我在头文件中有以下实用程序函数,用于将数字类型转换为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 位应用程序构建的,因此它使用了此版本 XE4 附带的 C++11 编译器。

谁能告诉我是否有任何原因导致我的上述函数不安全,或者标准库的 Embarcadero C++ builder XE4 实现是否存在任何已知问题,这使得这样做不安全?

4

0 回答 0