我正在查看一些遗留代码,并且有相当多的stringstream
使用。到目前为止,该代码通常从各种类型生成消息。除了在某些情况下执行以下操作之外:
std::ostringstream f1;
f1 << sDirectory << mFileName << sFileExtension << '\0';
和其他人做的(只是说明)
std::ostringstream f1;
f1 << sDirectory << mFileName << sFileExtension << std::ends;
我相信这些调用是因为它进一步访问f1.str().c_str()
并需要空终止它。
这些电话有什么区别吗?我从http://en.cppreference.com/w/cpp/io/manip/ends看到 std::ends 不刷新,std::ends 在不同平台(Linux/Windows/Mac)上是否不同?我应该更喜欢一个吗?
除此之外,我读到应该freeze(false)
在范围的后面(str()
使用后)调用字符串流以允许释放缓冲区(http://en.cppreference.com/w/cpp/io/ostrstream/freeze)。再次(可能我误读或误解了)但没有调用freeze(false)
所以这是否表明上面的每个流都在泄漏?
NB FYI 这是 Visual Studio 2005/Windows 7,但我不知道这是否有任何裸露。
抱歉,如果我很密集...