【发布时间】:2011-08-22 15:52:06
【问题描述】:
我对 C++ 的字符串相当陌生,所以下面的模式可能有点难看。在开始使用更大的系统进行集成测试之前,我正在查看我编写的一些代码。我想知道的是它是否安全,或者它是否容易泄漏内存?
string somefunc( void ) {
string returnString;
returnString.assign( "A string" );
return returnString;
}
void anotherfunc( void ) {
string myString;
myString.assign( somefunc() );
// ...
return;
}
我的理解是returnString 的值被分配给一个新对象myString,然后returnString 对象被销毁作为解析对somefunc 的调用的一部分。在未来的某个时刻,当 myString 超出范围时,它也会被销毁。
我通常会将指向 myString 的指针传递给 somefunc() 并直接分配给 myString 的值,但我正在努力使我的代码更清晰一点(并且依赖于副作用函数样式 less )。
【问题讨论】:
-
在第一个函数中,您可能只需要执行 "return string("A string");"并得到相同的结果。
-
@luiscubal 这是一个用于说明问题的简化示例。
-
@luiscubal 甚至
return "A string";都可以,因为 std::string 可以用 c 字符串构造。 -
@Ugo 没错,我忘了。
标签: c++ string memory-leaks std