std::ios_base::ios_base
来自 zh.cppreference.net
private:
ios_base( const ios_base& );
|
(1) | (直到 C++11) |
public:
ios_base( const ios_base& ) = delete;
|
(自 C++11 起) | |
protected:
ios_base();
|
(2) | |
1) 复制构造函数是 private(直到 C++11)deleted(自 C++11 起):流不可复制。
2) 默认构造函数是 protected:只有派生类可以构造
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 | 初始化无需在首次使用前完成 | 也需要完成初始化 |