C++では、main()で初期化する必要があるオブジェクトをグローバルに持つ必要があるため、プログラム全体の他の関数からアクセスできるようにするにはどうすればよいでしょうか?デストラクタが正しく呼び出されるように呼び出されていることを確認してください。あなたはoperator->
経由メンバーにアクセスさせたくない場合はグローバル変数のC++初期化
答えて
struct foo {};
foo *x_ptr;
int main() {
foo x;
x_ptr = &x;
// the rest
}
またstd::reference_wrapper
を使用することができます。
しかし、実際には、そうしないでください。グローバルにするのではなく、必要な場合はそれを渡します。
void needs_foo1(foo&);
void needs_foo2(foo&, int, int, int);
int main() {
foo x;
needs_foo1(x);
needs_foo2(x, 1, 2, 3);
// et cetera
}
彼が言っている理由は、何か変更できるグローバル変数を持つことは、どのエンティティがそれを変更しているのかわからない複雑なシステムでは本当に危険になる可能性があるからです。本当にデバッグするのが難しくなる可能性があります。 – sparkFinder
「グローバル」は要件ではなく解決策であると考えられます。それはあなたが常に明示的にあなたのオブジェクトを渡すことが示唆されているように。
私がおそらくshared::ptr
を使用したい場合は、Singleton実装でラップされている可能性があります。 shared_ptr
は、プログラムの起動時にnull
に初期化され、main()
の有効な値に設定されます。
他のグローバル変数に依存するグローバル変数がある場合、破壊の問題が発生する可能性があることに注意してください。シングルトンパターンの欠点についての巨大な文献もあります。
はい、グローバルが必須であるとは思いません。ちょうど1つを作って周りに渡してください。依存関係について明示してください。 –
- 1. グローバル変数初期化の最適化
- 2. グローバル変数0に初期化ペナルティ
- 3. 問題グローバル変数ヘッダーファイルの配列を初期化するC++
- 4. Cで変数を使用してグローバルを初期化
- 5. 列挙C、グローバル変数エラー:変数は初期化が、不完全型
- 6. UnityPlayerActivityグローバル初期化
- 7. C++クラスをグローバルに初期化する
- 8. C#の変数の初期化質問
- 9. 参照変数のC++の初期化
- 10. C#のラムダ変数の初期化
- 11. 変数の初期化エラーC++
- 12. C++参照変数の初期化リスト
- 13. C - 関数のグローバル配列を初期化する
- 14. Androidでのグローバル初期化
- 15. Cで変数を初期化する#
- 16. BehaviorSubject/Angular2で初期化されたグローバル変数での作業
- 17. pythonのグローバル変数、初期化と終了
- 18. グローバル変数と初期化の宣言方法
- 19. グローバル変数の初期化はいつ行われますか?
- 20. グローバル変数のメモリレイアウトを初期化する
- 21. 宣言時にグローバル変数の値を初期化
- 22. Perlグローバル変数が初期化されていません
- 23. グローバル変数は初期化されませんnodejs
- 24. JMeterは一度だけグローバル変数を初期化します
- 25. PageLoadで再初期化されたJavaScriptグローバル変数
- 26. Python 3を使ってグローバル変数を初期化するimport
- 27. gcc、初期化されていないグローバル変数
- 28. グローバル変数が新しいスレッドで初期化されない
- 29. web.py:初期化/グローバル変数をハンドラクラスに渡しますか?
- 30. サーブレット内のグローバル変数の同期化
あなたはヒープ上にオブジェクトを割り当てていますか? – Adrian