在C ++中,std::basic_iostream
的复制和移动分配运算符受到保护(出于我不太了解的原因)。这似乎使我缺乏许多方法来管理iostream
对象的集合,缺少手动在堆上分配它们,存储指针列表以及编写析构函数以清理它们的方法。
我错过了一些技巧,可以让我在std::vector
里面分配它们吗?
当然,我想我可以继承并只将受保护的运算符提升为公开,但这似乎是一团糟。
奖励问题:为什么这些方法首先受到移动分配运算符的保护?
答案 0 :(得分:1)
我可以在堆以外的任何地方存储iostream集合吗?
唯一不动态分配的标准容器是std::array
。您可以将iostream
存储在一个数组中:
std::stringbuf sb;
std::array streams{
std::iostream(&sb),
std::iostream(&sb),
};
答案 1 :(得分:0)
pi@raspberrypi:/tmp $ g++ -pedantic -Wextra s.cc
pi@raspberrypi:/tmp $ rm -f 0 1
pi@raspberrypi:/tmp $ ./a.out
pi@raspberrypi:/tmp $ ls -l 0 1
-rw-r--r-- 1 pi pi 4 févr. 21 18:39 0
-rw-r--r-- 1 pi pi 4 févr. 21 18:39 1
pi@raspberrypi:/tmp $ cat 0 1
000
111
编译和执行:
labelpad
答案 2 :(得分:0)
为了解决这个问题,我将总结FrançoisAndrieux的评论,这些评论加起来解决了这个问题:
尽管std::iostream
不是抽象类,并且可以实例化和使用,但这不是意向;相反,您应该从中继承来构建自己的流。然后,您可以实现move构造函数并将其放入std::vector
或任何您想要的文件中。