以下在调试模式下为x64编译并在Visual Studio 2013调试器中运行的最小代码示例产生
...处的未处理异常:访问违规写入位置 0xFEEEFEEE。
调试时,我发现访问冲突发生在"返回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;
}
答案 0 :(得分:2)
std::atomic<std::string>
在标准C ++中不合法,因为std::string
并非易于复制。遗憾的是,没有要求编译器拒绝此代码,但也没有要求(也没有可能)它也能正常工作。