代码之家  ›  专栏  ›  技术社区  ›  Vivek

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

c++
  •  0
  • Vivek  · 技术社区  · 6 年前

    这是我正在研究的代码示例。

    头文件具有以下代码:

    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 回复  |  直到 6 年前
        1
  •  5
  •   ShadowRanger    6 年前

    stemp.c_str() 返回A 非占有 指向字符串内容的指针。和 std::wstring stemp ,它拥有支持结果的数据 .c_str() ,从构造函数返回时即不再存在。

    将班级改为 const std::wstring 直接,这样您就有了字符串的一个拥有的、持久的副本。然后你可以安全地打电话 CX-序列() 当你需要一个 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()) {}