在std :: ostrstream :: str之后使用std :: ostrstream :: freeze来防止内存泄漏

时间:2015-03-09 19:48:11

标签: c++

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()的呼叫丢失,此功能是否会泄漏内存?

1 个答案:

答案 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()使用字符串