std::ios_base::ios_base
来自cppreference.com
(1) | ||
private: ios_base( const ios_base& ); |
(C++11 前) | |
public: ios_base( const ios_base& ) = delete; |
(C++11 起) | |
protected: ios_base(); |
(2) | |
1) 复制构造函数是私有的 (C++11 前)被弃置 (C++11 起):不能复制流。
2) 默认构造函数受保护:只有派生类可以构造 std::ios_base
。构造后内部状态未定义。派生类必须在首次使用或析构函数前调用 std::basic_ios::init() 完成初始化;否则行为未定义。
注解
同样的情况应用于输入/输出层级中的下个类 std::basic_ios 的构造函数。进一步派生的类(std::istream 与 std::ostream)始终以具体的流缓冲构造,并可能多次调用 std::basic_ios::init() 以完成它的虚基类的初始化。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 50 | C++98 | 未指明复制构造函数 | 指明为私有成员函数 |
LWG 220 | C++98 | 在还没有调用 std::ios_base 对象的 init() 时就销毁该对象的行为不明确
|
此时行为未定义 |
LWG 1249 | C++98 | 在首次使用前不需要完成初始化 | 也需要完成初始化 |