インスタンスを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. 同じクラスのifクラスの初期化値を返す最善のpythonメソッド
- 2. PHPUNIT - 同じインスタンスを2回インスタンス化するクラスを返す
- 3. java:クラス初期化中に同じクラスの静的フィールドの初期化
- 4. IVectorViewのインスタンスをC++/WRL用に初期化する方法は?
- 5. C++プログラムのクラス内で同じクラスのインスタンスを作る方法
- 6. 同様の方法で異なるクラスを初期化する
- 7. IOS Obj C:同じ値を持つ複数のIBOutletインスタンスを初期化する
- 8. Pythonでタプルのサブクラスのインスタンスを初期化する方法は?
- 9. Pythonのクラスとインスタンスの初期化
- 10. MATLABでセル配列を作成し、すべての要素を同じオブジェクトに初期化する方法は?
- 11. 常に同じインスタンスを返すクラス
- 12. インスタンスを含むリストを別のクラスから初期化する方法は?
- 13. Objective-c:インスタンスを初期化するvar
- 14. 実行可能ファイルの同じインスタンスで2つのスレッドを初期化する
- 15. コピーコンストラクタなしでクラスの静的インスタンスを初期化する方法>
- 16. 集計初期化を使用してC++/cxクラスを初期化する方法は?
- 17. すべてのサイトページでsw-precacheを初期化する方法
- 18. クラスのC++ discrete_distributionを再利用して再初期化する方法は?
- 19. 同じコントローラのすべてのインスタンスを更新する方法
- 20. クラスの初期化なしでのC#
- 21. C++のクラス内での初期化
- 22. Unity Framework:同じインターフェースから2つのクラスをインスタンス化する方法は?
- 23. C++クラスの初期化は、以下
- 24. クラスの変数は、再初期化後も同じままです
- 25. C++ 11クラス初期化エラー
- 26. クラス内のすべてのdoubleを0に初期化する
- 27. Java - デフォルト名のすべてのクラスを初期化するイテレータ
- 28. 同じページで2つのフォームを同期化する方法
- 29. python dict、リストはすべてのクラスで同じインスタンスを持っています
- 30. 親クラスの初期化中にサブクラスの新しいインスタンスを返す方法次のように
なぜこれをやりたいですか? –
それは練習用です...本から – prgDevelop