【问题标题】:Is this a proper use of a temporary std::string?这是对临时 std::string 的正确使用吗?
【发布时间】:2011-03-27 13:00:06
【问题描述】:
std::string getMyString() { return <make a string>; }

...

HANDLE something = OpenSomething(getMyString().c_str(), ...);

我已阅读 Guaranteed lifetime of temporary in C++,并且我相信临时字符串将一直存在,直到任务被评估为止,即足够长的时间以使这项工作按预期工作。

之前遇到过一次 std::string 与生命周期相关的错误(不记得是什么),我宁愿仔细检查...

【问题讨论】:

    标签: c++ object-lifetime


    【解决方案1】:

    临时的析构函数直到函数调用返回后才会被调用,所以我们在这里看到的是安全的。

    然而如果被调用的函数保存了char*,并且在OpenSomething返回之后以某种方式被使用,那么这是一个很好的悬空指针。 p>

    【讨论】:

      【解决方案2】:

      是的,这很好。 :-)

      字符串将在语句末尾的分号处销毁。

      【讨论】:

        【解决方案3】:

        如果你不使用OpenSomthing 的任何其他参数来返回指向getMyString.c_str() 的指针,一切都会好起来的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-18
          • 2021-01-05
          • 1970-01-01
          • 2018-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多