【发布时间】:2010-12-04 17:01:21
【问题描述】:
是否可以让流的streambuf 在其原始流的销毁后仍然存在?
streambuf* f() {
ifstream my_stream;
// ...
return my_stream.rdbuf();
}
void g() {
streambuf *s = f();
// ...
ifstream my_new_stream;
my_new_stream.rdbuf( s );
}
即,我希望 f() 返回的指向 streambuf 对象的指针即使在 my_stream 超出范围后仍保持有效。稍后,我想将其他一些流的streambuf 设置为保存的streambuf。
这可能吗?如果有,怎么做?
【问题讨论】:
-
为什么要这样做?为什么不能只存储对
ifstream本身的引用? -
如果 ifstream 超出范围,我仍然有同样的问题。
-
rdbuf 版本,它需要一个指向 streambuf 的指针,也返回以前使用的旧 streambuf,并且应该将所有权转移给你......也许这对你有用......但我不知道@ 987654329@ 有效.. 或者如果
return stream.rdbuf(new stringbuf("leaks")) -
如果您查看 fstream(至少是 g++ 版本),它内部包含一个 streambuf 对象。当 fstream 消失时,streambuf 也会消失。我可以保留它的唯一方法是将其复制构造到一个新的 streambuf 对象中,但尚不清楚 streambuf 是否可复制构造(或便宜)。
-
@Paul J. Lucas:那就不要让它超出范围。我的意思是,在旧
filebuf的基础上构建一个新的ifstream并没有比只使用旧的有任何优势。