gpt4 book ai didi

c++ - 让流的 streambuf 在流的破坏之外持续存在?

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:14 28 4
gpt4 key购买 nike

流的 streambuf 是否有可能在其原始流被销毁后仍然存在?

streambuf* f() {
ifstream my_stream;
// ...
return my_stream.rdbuf();
}

void g() {
streambuf *s = f();
// ...
ifstream my_new_stream;
my_new_stream.rdbuf( s );
}

即,即使 my_stream 超出范围,我也希望 f() 返回的指向 streambuf 对象的指针保持有效。稍后,我想将其他流的 streambuf 设置为保存的 streambuf

这可能吗?如果是,怎么办?

最佳答案

这是不可能的。 std::ifstream 构造、拥有和销毁其缓冲区。它通过 rdbuf“导出”的唯一原因是允许重定向 std::cin 等。在 GNU 实现中,缓冲区是一个简单的成员(不是指针) .

std::ifstream 不导出带有参数的 rdbuf() 成员。它的父类之一确实如此,但这应该被 std::basic_ifstream 中带有签名的 rdbuf 的重新定义所掩盖

std::filebuf *rdbuf() const;

std::filebuf 也是不可复制的。

(rdbuf(std::streambuf *) 成员可以通过转换为 std::ios 来检索。使用它会导致熟悉的鼻腔恶魔。)

关于c++ - 让流的 streambuf 在流的破坏之外持续存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4354659/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com