std::atomic<std::string>:在 Visual Studio 2013 (VC12) 中写入位置 0xFEEEEFEEE 时出现访问冲突 - 使用 std::atomic<int> 时不会发生

ale*_*lex 0 multithreading c++11 stdatomic

以下最小代码示例在 x64 调试模式下编译并在 Visual Studio 2013 调试器中运行,生成

未处理的异常位于...:访问冲突写入位置 0xFEEEFEEE。

调试时,我发现访问冲突发生在“return 0;”处 陈述。

(当在没有调试器的情况下从控制台运行时,错误显示“0x 处的指令...引用了 0xddddddd 处的内存...无法写入内存。”)。

#include <atomic>
#include <string>

int main()
{
  std::atomic<std::string> a1("127.0.0.1:41001");
  std::string ep1_1 = a1.load();
  std::string ep1_2 = a1.load();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*nck 6

std::atomic<std::string>在标准 C++ 中不合法,因为std::string不可简单复制。不幸的是,没有要求编译器拒绝此代码,但也没有要求(也不可能)它能够正常工作。

另请参阅:std::atomic<std::string> 是否正常工作?