7
A
答えて
10
主な違いは、構築が行われるときです。最初のケースでは、main()
が始まる前にいつか発生します。 2番目のケースでは、それはGetFoo()
への最初の呼び出しの間に発生します。
最初のケースでは、コードが(不正に)初期化の前にfoo
を使用する可能性があります。 2番目のケースではこれは不可能です。
+0
インテントが正しい間に、十分な努力を払って、関数の再帰呼び出しを通じて初期化の前にスタティック関数(C++ 03で)を使用することができます。 –
1
GetFoo
は、通常、クラス/オブジェクトのコピーを必要としないときに使用されます。たとえば :
class Foo
{
private:
Foo(){};
~Foo();
public:
static Foo* GetFoo(void)
{
static Foo foo;
return &foo;
}
int singleobject;
};
あなたはFoo::GetFoo()->sinlgeobject
経由singleobject
に外部からアクセスすることができます。プライベートコンストラクタとデストラクタは、あなたのクラスが作成されたコピーを取得することを避けます。
static Foo foo
を使用するには、公開コンストラクタが宣言されている必要があります。つまり、常にクラスにアクセスしていますが、クラスもコピーを取得できます。
関連する問題
- 1. `Foo <i32>`と `Foo <u32>`
- 2. Foo <Rubyのバー
- 3. Java:What is - public static <T> foo(){...}?
- 4. Foo <Derived>からFooへのコンバージョン<Base>
- 5. Angular2インポート構文: "import * as <foo>" vs "import {<foo>}"
- 6. ジェネリック型のためのカスタムデシリアライザの作成方法私はFooのためのカスタム・ジャクソンのデシリアライザを書きたい</p> <pre><code>class <T> Foo<T> { .... } class Bar { Foo<Something> foo; } </code></pre> <p>:
- 7. map <string、pair <string、foo * >>とmap <string、pair <string、foo&>>の違いは何ですか?
- 8. 関数の引数:それは不可能です</p> <pre><code>void foo(vector<Clazz*>& v) { ... v[0]->method(); ... } void foo(vector<Clazz>& v) { ... v[0].method(); ... } </code></pre> <p>/:ベクトル<Clazz*>&ベクトル<Clazz>&
- 9. オブジェクト属性に値が設定されていないのはなぜですか?</p> <blockquote> <pre><code><Foo>Bar</Foo> </code></pre> </blockquote> <p>そして<code>Foo</code>要素の値を抽出し、このコード:
- 10. IEnumerable <foo>のリストをリストに変換する<string>
- 11. Perlの文字列の乗算がundefで警告しないのはなぜですか?</p> <pre><code>$foo . '' </code></pre> <p>と</p> <pre><code>"$foo" </code></pre> <p>
- 12. リストをキャストする方法<? Foo>を<Foo>にリストする
- 13. 2つのオブジェクトの参照をバインドする方法は?私は2つのオブジェクト</p> <pre><code>Foo foo; Foo bar = foo; </code></pre> <p>を持っている場合
- 14. TypeScriptデコレータでデータを取得するには?私は何とか<code>Foo</code>にアクセスすることができ、デコレータから</p> <pre><code>@decorator foo: Foo; </code></pre> <p>:
- 15. ダガー2:マップ<Class <?を挿入する方法extends Foo>、Provider <? Foo >>
- 16. git submodule functionality with sibling?</p> <pre><code>foo/ foolib/ bar/ baz/ qux/foo/ </code></pre> <p>アプリケーションのすべてが<em>foolib</em>、静的ライブラリにリンク:
- 17. レールは、私が<code>Foo::ActiveRecord_AssociationRelation</code>を持って
- 18. テンプレートクラスFooメソッドの引数は "Foo&"で、 "Foo <T>&"は同じですか?
- 19. PHP <?=foo() ?>が動作しない
- 20. なGroovy:私のファイル名はクラス名と一致した場合、それはのみ動作し、</p> <pre><code>class Foo { String name } def foo = new Foo(name:"Test") </code></pre> <p>しかし:名前付きパラメータコンストラクタ
- 21. Linqのディクショナリ<int、Dictionary <int, Foo>>をIEnumerable <IEnumerable <Foo>>に変換する最も簡単な方法は?
- 22. TypJSはCommonJSモジュールをインポートできますか?だから、私は私の活字体ファイルにインポートしたい</p> <pre><code>//foo.js var foo = function() { return "foo"; }; module.exports = foo; </code></pre> <p>:
- 23. 書く方法OfType <Foo<Bar>>()
- 24. iPythonでreStructuredText(Sphinx)ドキュメントストリングを表示しますか?</p> <pre><code>help foo </code></pre> <p>か::</p> <pre><code>foo? </code></pre> <p>を、私はそれ<em>スーパー</em>を読み取ろうとする邪魔見つける
- 25. マルチインデックススライスインデックスが完全に私は<code>foo</code><code>year == someYear</code>のX最大観測を選択したい指数(<code>year</code>、<code>foo</code>)、を有するデータフレームを有する
- 26. 関数は.prototypeに応答しますが、通常のオブジェクトは応答しないのはなぜですか?今のx</p> <pre><code>function Foo() {} var x = new Foo(); </code></pre> <p>とFooのは同じプロトタイプを持っているが、唯一のfooが.prototypeに応答:
- 27. 私は2つの機能</p> <pre><code>void foo() { std::cout << 1 << std::endl; } void bar() { std::cout << 2 << std::endl; } </code></pre> <p>をお持ちの場合は2個の関数のC++
- 28. Oracle上のPL/SQLで行タイプ変数を使用しているMERGE?タイプ<code>foo%ROWTYPE</code>の変数<code>bar</code>で
- 29. module.exportsは</p> <p>ためES6相当私はimport文しようとしました</p> <pre><code>module.exports = { foo: function (a) { } } </code></pre> <p>からfooの値を取得したい何module.exportsは
- 30. Rails 2.3.12: 'GET/foo'、 'PUT/foo'、 '<any>/foo/bar'を個別にルーティングする
グローバル変数を使用すると、命名の競合が発生する危険性があります。 – VoidStar
http://stackoverflow.com/questions/12186857/on-local-and-global-static-variables-in-cを参照してください。 –
遅延初期設定。 – iammilind