这是我正在处理的代码示例。
头文件具有以下代码:
class TestClass
{
private:
LPCWSTR m_variable;
public:
TestClass(const std::string& variable);
}
这是实现:
TestClass::TestClass(const std::string& variable)
{
std::wstring stemp = std::wstring(variable.begin(), variable.end());
m_variable= stemp.c_str();
}
这是我拨打电话的代码
std::string tempStr = "Panda";
TestClass *test = new TestClass(tempStr);
我逐步调试程序,发现在构造函数中,该值看起来不错L"Panda"
。但是,一旦退出调试器,我将不再看到变量的数据。
答案 0 :(得分:5)
stemp.c_str()
返回指向字符串内容的 non-owning 指针。而拥有支持std::wstring stemp
结果的数据的.c_str()
在您从构造函数返回时就不复存在了。
更改您的类以直接存储const std::wstring
,因此您拥有该字符串的拥有的持久副本。然后,您可以在需要.c_str()
时安全地呼叫成员上的LPCWSTR
:
class TestClass
{
private:
const std::wstring m_variable;
public:
TestClass(const std::string& variable);
}
TestClass::TestClass(const std::string& variable) : m_variable(variable.begin(), variable.end()) {}