将LPCWSTR与另一个字符串组合

combining LPCWSTR with another string

本文关键字:字符串 组合 另一个 LPCWSTR      更新时间:2023-10-16

我有一个需要保存文件的类,构造函数得到一个名为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(fullPath) + L".ip")创建的临时std::wstring将在表达式求值后被销毁。使用这个临时对象的内部内存(由c_str公开)是未定义的行为,也是一个bug。

在第二个表达式中,您将结果保存在自动变量cp中。因此,直到当前作用域结束为止,您都可以使用变量cp的内部内存。一旦作用域结束,cp将被销毁并释放其内存。