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