インスタンスを1つしか持てないクラスを作成したいとします。クラスの別のインスタンスを作成しようとすると、最初のインスタンスが返されます。C++のすべてのクラス初期化で同じインスタンスを返す方法は?
答えて
C++でSingleton patternを検索していると思います。ここにはimplementationとここにはlinux tutorialがあります。シングルトンパターンはC++で
非常に良い実装ではありません。複数のスレッドの面で失敗します。 –
シングルトンパターンを使うたびに、子猫が死ぬ。 –
ジェフアトウッドがシングルトンのパターンを使うたびに、ユニコーンが死ぬ! –
シングルトンよりもMonoStateに近いと思います。
MonoStateは、すべてのオブジェクトが静的メンバー変数によって同じ状態を共有することによって機能します。インスタンスは異なりますが、インスタンスによって返されるデータは同じです。ここに簡単な実装があります:
class MonoStateSession {
private:
static int _SessionId;
public:
void SetSessionId(int newSessionId) {
//Put threading checks/locks here
_SessionId = newSessionId;
}
int GetSessionId() {
return _SessionId;
}
}
//Usage
MonoStateSession session1 = new MonoStateSession();
session1.SetSessionId(123);
MonoStateSession session2 = new MonoStateSession();
assert(session2.GetSessionId() == 123);
いいえ...しかし、あなたはそれに近づくことができます。たとえば、あなたは、たとえば...すべてのインスタンスが同じ実際のオブジェクトの単なるクローンであるクラスを作成することができます。すべてのMyObject
インスタンスはまだ例えば、自身のアドレスで(個別のオブジェクトになります
struct TheRealObject
{
std::string s;
TheRealObject() { ... }
void foo(int x) { ... }
double bar(char y) { ... }
static TheRealObject& getInstance()
{
static TheRealObject trb;
return trb;
}
};
struct MyObject
{
std::string& s;
MyObject() : s(TheRealObject::getInstance().s) {}
void foo(int x) { TheRealObject::getInstance().foo(x); }
double bar(char y) { return TheRealObject::getInstance().bar(y); }
};
注意を)しかし、彼らはメソッドとデータメンバの両方のアクセスのために、TheRealObject
の唯一のインスタンスにトランポリンとして機能します。
なぜこのような不思議なことをしたいのですか?代わりにシングルトンを探しているだけかもしれません(上記のTheRealObject
のように)?
- 1. IOS Obj C:同じ値を持つ複数のIBOutletインスタンスを初期化する
- 2. Pythonでタプルのサブクラスのインスタンスを初期化する方法は?
- 3. MATLABでセル配列を作成し、すべての要素を同じオブジェクトに初期化する方法は?
- 4. 常に同じインスタンスを返すクラス
- 5. 実行可能ファイルの同じインスタンスで2つのスレッドを初期化する
- 6. Objective-c:インスタンスを初期化するvar
- 7. Unity Framework:同じインターフェースから2つのクラスをインスタンス化する方法は?
- 8. C++クラスの初期化は、以下
- 9. 親クラスの初期化中にサブクラスの新しいインスタンスを返す方法次のように
- 10. python dict、リストはすべてのクラスで同じインスタンスを持っています
- 11. C++クラスでchar *を初期化する方法は? (sizeof()は常に8を返します)
- 12. ハッシュセットとすべてのメンバーが同じクラスの異なるインスタンス
- 13. C++でstructの配列を初期化する方法は?
- 14. このテンプレートペアをC++で初期化する方法は?
- 15. Solrnet - 基本認証でインスタンスを初期化する方法
- 16. 初期化インスタンス - ルビー
- 17. C++構造体の初期化方法
- 18. クラスのコンストラクタでベクトルを初期化する方法
- 19. 同時にインスタンス化関数と変数の初期化
- 20. インスタンスをPHPで初期化する
- 21. cコールの同期はコマンドの同期と同じですか?
- 22. テーブルビュー内のすべてのセルを.gif初期化する方法は?
- 23. すべてのタイプのUTIでUIDocumentPickerViewControllerを初期化する方法
- 24. Objective CでNSMutableArrayを初期化する方法は?
- 25. Cでリストを初期化する方法は?
- 26. C++でwchar_tポインタ変数を初期化する方法は?
- 27. 初期化後にChartJSインスタンスを取得する方法
- 28. 構造体のベクトルをC++で初期化する方法
- 29. 同じクラスとガベージコレクションのデストラクタ内でのオブジェクトのインスタンス化
- 30. C#で派生クラスを初期化するには?
なぜこれをやりたいですか? –
それは練習用です...本から – prgDevelop