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)
デフォルトコンストラクタは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 | 初期化が最初の使用前に完了する必要がなかった | 完了する必要がある |