从构造函数C++返回后丢失成员变量的值

Viv*_*ek 0 c++

这是我正在处理的代码示例.

头文件包含以下代码:

class TestClass
{
  private:
    LPCWSTR m_variable;
  public:
    TestClass(const std::string& variable);
}
Run Code Online (Sandbox Code Playgroud)

这是实施:

TestClass::TestClass(const std::string& variable)
{
  std::wstring stemp = std::wstring(variable.begin(), variable.end());
  m_variable= stemp.c_str();
}
Run Code Online (Sandbox Code Playgroud)

这是我打电话的代码

std::string tempStr = "Panda";
TestClass *test = new TestClass(tempStr);
Run Code Online (Sandbox Code Playgroud)

我通过调试器,看到在构造函数中,值看起来很好L"Panda".但是一旦我退出调试器,我就不再看到变量的数据了.

Sha*_*ger 5

stemp.c_str()返回一个指向字符串内容的非拥有指针.并且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()) {}
Run Code Online (Sandbox Code Playgroud)