私はDeviceクラスを持っているとします。プログラマが自分のDeviceオブジェクトをインスタンス化できるようにしたいので、DeviceManagerクラスを作成します。 DeviceManagerは、インスタンス化される唯一のエンティティであり、プログラマが何らかのIDを指定することによって、プログラマがDeviceオブジェクトにアクセスできるようにします。このようにして、DeviceManagerクラスのみがプログラマによってクリーンアップされ、漂遊Deviceオブジェクトは残されません。私の主な関心事は、面倒なガベージコレクションのためにオブジェクトへのアクセスを制御する方法です。私はC++で良いアイデアを記述したような "マネージャ"パターンですか?ありがとう!どのようにしてC++でオブジェクトへのアクセスを制御できますか?
答えて
本当に必要な場合は、はい。この制御を達成するために
、あなたはDevice
private
のコンストラクタを作成し、Device
クラスで保護されたようDeviceManager
を宣言することができます。
class Device
{
private: //not necessary, private by default
Device();
friend class DeviceManager;
};
class DeviceManager
{
public:
Device* getDevice();
};
また、(推奨)Device
へのスマートポインタを返すことができますし、何が必要に応じて、DeviceManager
の内側に作成されたデバイスを保ちます。
インスタンスマネージャパターンと呼ばれます。 DeviceManager
もデバイスの工場です。
また、C++にはガベージコレクションはありませんが、スマートポインタを使用する場合はメモリ管理について心配する必要はありません。
私たちはPrivate Constructorを使ってこれを達成できます。 プライベートコンストラクタは特別な種類のコンストラクタです。静的メンバのみを含むクラスでよく使用されます。クラスにプライベートコンストラクタが1つ以上あり、パブリックコンストラクタがない場合、他のクラスはこのクラスのインスタンスを作成できません。 例えば
class abc
{
private abc()
{}
}
空のコンストラクタの宣言は、デフォルトコンストラクタの自動生成を防止します。コンストラクタでアクセス修飾子を使用しない場合でも、デフォルトではprivateであることに注意してください。ただし、private修飾子は、通常、クラスをインスタンス化できないことを明示するために明示的に使用されます。
プライベートコンストラクタは、Mathクラスなどのインスタンスフィールドやメソッドがない場合、またはクラスのインスタンスを取得するためにメソッドが呼び出されたときに、クラスのインスタンスの作成を防止するために使用されます。クラス内のすべてのメソッドが静的である場合は、クラス全体を静的にすることを検討してください。
- 1. どのようにしてKubernetesサービスへのアクセスを制限できますか?
- 2. どのようにweb2pyでオブジェクト/レコードレベルのアクセス制御を達成するには?
- 3. どのようにスレッドの数を制御できますか?
- 4. コンパイラ(GCC)はC++のアクセス制御をどのように扱いますか?
- 5. サブレポートのレイアウトはどのように制御できますか?
- 6. ERC20トークンはどのように機能へのアクセスを制御しますか?ここで
- 7. Spring&Hibernateでトランザクションをどのように制御しますか?
- 8. IPアドレスに基づいてBigQueryへのアクセスを制御するにはどうすればよいですか?
- 9. Julia Web Platformでのオブジェクトのアクセス制御
- 10. フォームのオブジェクト属性にC#でどのようにアクセスできますか?
- 11. ページへのアクセス権制御
- 12. どうやって逆にトランジションを制御できますか?
- 13. Matlabではプロット時にカラーイテレータをどのように制御できますか?
- 14. テーブルの特定の列へのアクセスを制御しますか?
- 15. Saxonの特定の拡張機能へのアクセスを制御できますか?
- 16. アンドロイドスタジオのアクティビティライフサイクル(onDestroy)を変更できるように、どのように向きを制御できますか?
- 17. C++でコンパイルエラーをどのように強制できますか?
- 18. Apacheで大きなファイルへのアクセスを制御する
- 19. どのようにC#からWin7のマイクとマイクブーストの設定をプログラムで制御できますか?
- 20. JS - どのようなオブジェクトで、どのようにアクセスできますか?
- 21. サーバー側のデータへのアクセスを制御するにはどうすればよいですか?
- 22. tomcatの画像へのアクセスを制御するにはどうすればよいですか?
- 23. どのようにビュークラスのクエリセットの項目を制御できますか?
- 24. アクセス制御が可能なBluemixコンテナレジストリにアクセスできますか?
- 25. C#DLLアクセスの制御
- 26. どのようにModernUIダイアログの幅を制御しますか?
- 27. 制御ファイル内のデータをどのように検証できますか?
- 28. どのように私はcassandraの複製を制御できますか?
- 29. 多くのスレッドをどのように制御できますか?
- 30. サービスへのアクセスを制御するデザインパターン
私は**デバイスのポインタを返さない**を除きます。 DeviceManagerがライフスパンを管理している場合、またはスマートポインタを返して所有者の共有セマンティクスを呼び出し元に示す場合、呼び出し元が返されたデバイスの所有権を取得/共有するかどうかを示す場合に参照を返します。 –