http://en.cppreference.com/w/cpp/io/ostrstream/freeze
注释调用str()后,动态流将被冻结 自动。退出之前需要调用冻结(false) 创建此ostrstream对象的范围。否则 析构函数会泄漏内存。另外,冻结的额外输出 流可能会在到达已分配的末尾时被截断 缓冲液中。
std::string Function( const ObjectA & obj )
{
std::ostringstream os;
os << obj;
return os.str( );
}
问题&GT;由于std::ostrstream::freeze
之后str()
的呼叫丢失,此功能是否会泄漏内存?
答案 0 :(得分:2)
该标准有效地解释了( D.7.1.1和D.7.1.2 部分),str()
将strstream
的状态设置为冻结,strstreambuf::~strstreambuf()
{1}}
仅当 strmode&amp;&gt;时才释放动态分配的数组对象。 已分配!= 0和strmode&amp; 冻结== 0 。
正如你的strstream
(我认为在这里使用字符串流是一个错字,给你的问题)是一个本地对象,它会在你返回时被破坏,泄漏内存。
重要提示: strstream
已弃用并仅在兼容性问题时保持活动状态。如果您使用stringstream
,则stringstream::str()
使用字符串