我有一个需要保存文件的类,构造函数获取一个名为fullPath的LPWSTR,然后我尝试这样做(curPath是一个LPCWSTR类变量):
curPath = (std::wstring(fullPath) + L".ip").c_str();
但最终却是胡言乱语。同时这也有效:
auto cp = std::wstring(fullPath) + L".ip";
curPath = cs.c_str();
虽然在我看来他们应该基本上做同样的事情。那是什么?
答案 0 :(得分:2)
表达式(std::wstring(fullPath) + L".ip")
创建的临时std :: wstring将在计算表达式后销毁。
使用此临时的内部存储器(由c_str公开)是未定义的行为和错误。
在第二个表达式中,将结果保存在auto变量cp中。因此,在当前范围结束之前,您可以使用变量cp的内部存储器。一旦范围结束,cp将被销毁并释放其内存。