rdbuf(...) returns 一个指针——谁拥有指向的缓冲区?

rdbuf(...) returns a pointer -- who owns the buffer pointed to?

有STL<ios>库函数

streambuf* std::basic_ios::rdbuf (streambuf* sb);

此函数可用于更改与流关联的流缓冲区。如果您使用它,它 returns 指向先前使用的流缓冲的指针。尚不清楚 'owns' 指针是谁或它的生命周期是多少。标准 (27.5.5.3/5) 只是说

Returns: the previous value of rdbuf().

信息量不大。关于这个指针的有效期有多长有任何保证吗?调用代码是否应该 delete 指针完成后?

缓冲区归最初将缓冲区安装到流对象中的任何人所有。流对象自带内部缓冲区,默认构造的流对象默认使用它。

因此,除非您的代码使用 rdbuf() 方法显式安装非默认缓冲区,否则只要流对象存在,缓冲区就有效。

如果你没有安装缓冲区,你显然不应该delete它。