我有一个需要保存文件的类,构造函数获取一个名为fullPath的LPWSTR,然后尝试这样做(curPath是LPCWSTR类变量):
curPath = (std::wstring(fullPath) + L".ip").c_str();
但最终变得胡言乱语。同时这有效:
auto cp = std::wstring(fullPath) + L".ip";
curPath = cs.c_str();
在我看来,他们基本上应该做同样的事情。那是怎么回事?
表达式创建后的临时std :: wstring(std::wstring(fullPath) + L".ip")
将在评估表达式后销毁。使用此临时内存(由c_str公开)的内部存储器是未定义的行为和错误。
在第二个表达式中,将结果保留在自动变量cp中。因此,在当前作用域结束之前,您可以使用变量cp的内部存储器。一旦作用域结束,cp将被销毁并释放其内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句