Pav*_*avi 3 c++ pointers memory-management stdstring
我有一个定义如下的方法:
const std::string returnStringMethod()
{
std::string myString;
// populate myString
return myString;
}
Run Code Online (Sandbox Code Playgroud)
现在,在调用者中,我做了类似这样的事情:
const char * ptr = returnStringMethod().c_str();
Run Code Online (Sandbox Code Playgroud)
正如我所看到的,这是返回一些我没想到的截断字符串.但是,以下工作正常:
std::string str = returnStringMethod();
const char * ptr = str.c_str();
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解这里发生的事情吗?.
PS:我们每周构建一次代码.我上周提交代码时测试了这个,事情还不错.所以,我真的想知道我在这里可能缺少什么.
谢谢,帕万.
第一个是未定义的行为,临时returnStringMethod()仅在尾随时有效;,因此内部字符串(返回者c_str())被销毁,因此你留下了一个悬空指针.
第二个版本是有效的,因为str它的范围结束时将被销毁,并且其范围与ptr(至少在您的示例中)相同.
例如,以下也是错误的:
const char * ptr = NULL;
{
std::string str = returnStringMethod();
ptr = str.c_str();
}
Run Code Online (Sandbox Code Playgroud)
之后},ptr不再有效.
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |