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

时间:2019-02-01 01:57:11

标签: c++

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

头文件具有以下代码:

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"。但是,一旦退出调试器,我将不再看到变量的数据。

1 个答案:

答案 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()) {}