std::ostrstream:: freeze
|
void
freeze
(
bool
flag
=
true
)
;
|
(C++98 中已弃用)
(C++26 中移除) |
|
如果流正在使用动态分配的数组进行输出,则禁用( flag == true )或启用( flag == false )缓冲区的自动分配/释放。实际上调用了 rdbuf ( ) - > freeze ( flag ) 。
目录 |
备注
在调用 str() 后,动态流会自动冻结。在此 ostrstream 对象所在作用域结束前,必须调用 freeze ( false ) ,否则析构函数将导致内存泄漏。此外,对已冻结流进行额外输出时,一旦达到分配缓冲区的末尾,输出内容可能会被截断。
参数
| flag | - | 期望状态 |
返回值
(无)
示例
#include <iostream> #include <strstream> int main() { std::ostrstream dyn; // 动态分配的输出缓冲区 dyn << "Test: " << 1.23; // 注意:未使用 std::ends 以演示追加操作 std::cout << "The output stream contains \""; std::cout.write(dyn.str(), dyn.pcount()) << "\"\n"; // 由于调用 str(),流现在处于冻结状态 dyn << " More text"; // 输出到冻结的流可能被截断 std::cout << "The output stream contains \""; std::cout.write(dyn.str(), dyn.pcount()) << "\"\n"; dyn.freeze(false); // 必须调用 freeze(false),否则析构函数将导致内存泄漏 std::ostrstream dyn2; // 动态分配的输出缓冲区 dyn2 << "Test: " << 1.23; // 注意:未使用 std::ends std::cout << "The output stream contains \""; std::cout.write(dyn2.str(), dyn2.pcount()) << "\"\n"; dyn2.freeze(false); // 在 str() 后解冻流 dyn2 << " More text" << std::ends; // 输出不会被截断(缓冲区会增长) std::cout << "The output stream contains \"" << dyn2.str() << "\"\n"; dyn2.freeze(false); // 必须调用 freeze(false),否则析构函数将导致内存泄漏 }
可能的输出:
The output stream contains "Test: 1.23" The output stream contains "Test: 1.23 More " The output stream contains "Test: 1.23" The output stream contains "Test: 1.23 More text"
另请参阅
|
设置/清除缓冲区的冻结状态
(
std::strstreambuf
的公开成员函数)
|