Namespaces
Variants

std::ios_base:: ios_base

From cppreference.net
(1)
private :
ios_base ( const ios_base & ) ;
(C++11 前)
public :
ios_base ( const ios_base & ) = delete ;
(C++11 起)
protected :
ios_base ( ) ;
(2)
1) 复制构造函数被 private (until C++11) deleted (since C++11) :流不可复制。
2) 默认构造函数受保护:仅派生类可以构造 std::ios_base 。构造后内部状态未定义。派生类必须在首次使用前或析构函数前调用 std::basic_ios::init() 来完成初始化;否则行为未定义。

注释

这同样适用于I/O层次结构中下一个类的构造函数, std::basic_ios 。进一步派生的类( std::istream std::ostream )总是通过具体的流缓冲区对象构造,并调用 std::basic_ios::init() (可能多次)来完成其虚基类的初始化。

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用标准 发布时行为 正确行为
LWG 50 C++98 未指定拷贝构造函数 指定为私有
LWG 220 C++98 在调用其 init() 之前销毁
std::ios_base 对象的行为不明确
此情况下行为
未定义
LWG 1249 C++98 初始化无需在首次使用前完成 也需要完成初始化