「More C++ Idioms/小粋なカウンタ(Nifty Counter)」の版間の差分

削除された内容 追加された内容
誤字の修正: 「初夏化」 → 「初期化」
Yak! (トーク | 投稿記録)
M en:More C++ Idioms/Nifty Counter (15:36, 9 November 2007 UTC) から (18:33, 28 May 2008) への変更を反映。
 
1 行
=<center>小粋なカウンタ(Nifty Counter)</center>=
=== 意図 ===
非ローカル静的オブジェクトがその最初の使用時より前に初期化され、また最後の使用の後にのみ破壊されることを保証する。
 
=== 別名 ===
[[More C++ Idioms/小粋なカウンタ(Nifty Counter)|シュワルツカウンタ(Schwarz Counter)]]
 
=== 動機 ===
静的オブジェクトが別の静的オブジェクトを使用する場合、初期化の問題はより複雑になる。静的オブジェクトが自明でない(non-trivial)初期化処理を持つ場合、使用前に初期化されなければならない。翻訳単位間での静的オブジェクトの初期化順序は厳密には定義されていない。複数の翻訳単位にまたがる複数の静的オブジェクトが単一の静的オブジェクトを使用するかもしれない。例えば、std::cout が考えられる。std::cout は他のいかなる数の静的オブジェクトにも使用されうる。そのため使用前に初期化されなければならない。
 
=== 解法とサンプルコード ===
小粋なカウンタ(Nifty counter)イディオムは、静的順序の初期化に[[More C%2B%2B Idiom/参照カウント(Reference Counting)|参照カウントイディオム]]を適用した例である。
<source lang="cpp">
47 ⟶ 49行目:
Stream クラスのヘッダファイルは、Stream オブジェクトのメンバ関数呼び出しが発生しうるよりも前に include されなければならない。StreamInitializer クラスのインスタンス(イニシャライザ)は各翻訳単位に含まれる。Stream オブジェクトの使用はヘッダの include の後に発生する。これにより、イニシャライザオブジェクトのコンストラクタが Stream オブジェクトが使用される前に呼び出されることが保証される。
 
=== 既知の利用 ===
C++ 標準の iostream ライブラリ
std::cout, std::cin, std::cerr, std::clog
 
=== 関連するイディオム ===
* [[More C%2B%2B Idiom/参照カウント回数計測(Reference Counting)|参照カウント回数計測(Reference Counting)]]
 
=== References ===
 
<noinclude>
== References ==
[[en:More C++ Idioms/Nifty Counter]]
</noinclude>
[[Category:{{BASEPAGENAME}}|{{SUBPAGENAME}}こいきなかうんた]]