为什么我不能创建std :: ifstreams的std :: stack?

Pra*_*ari 6 c++ stack iostream stl ifstream

为什么以下不起作用:

#include <iostream>
#include <fstream>
#include <stack>

std::stack<std::ifstream> s;
Run Code Online (Sandbox Code Playgroud)

-PT

Tyl*_*nry 10

std::stack(像所有STL容器一样)要求其包含的类型是"可分配的".在STL中,这意味着它必须有一个复制构造函数和一个operator=.std::ifstream没有这些.

您可以想象为什么您不希望能够复制和分配I/O流; 当有两个相同流的副本时应该发生什么的语义不明显.读取或写入一个副本是否会影响另一个副本的位置?关闭一个流关闭另一个流?等等

如果你想拥有" std::ifstreams 的容器",那么你真正应该做的是" std::ifstream*s 的容器".非常量指针总是可分配的.需要注意的是,在这种情况下,您必须确保在破坏容器之前自己删除指针,因为容器不会为您执行此操作.