我有一个应用程序在我的程序终止时抛出异常。我在头文件中有以下实用程序函数,用于将数字类型转换为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 实现是否存在任何已知问题,这使得这样做不安全?