std::ios_base::ios_base
ja.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++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 50 | C++98 | コピーコンストラクタが規定されていなかった | privateとして規定 |
| LWG 220 | C++98 |
std::ios_base
オブジェクトを init() 呼び出し前に破棄する動作が不明確だった |
この場合の動作は
未定義 |
| LWG 1249 | C++98 | 初期化が最初の使用前に完了する必要がなかった | 完了する必要がある |