私は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. サブレポートのレイアウトはどのように制御できますか?
- 2. テーブルの特定の列へのアクセスを制御しますか?
- 3. Apacheで大きなファイルへのアクセスを制御する
- 4. C++でコンパイルエラーをどのように強制できますか?
- 5. サーバー側のデータへのアクセスを制御するにはどうすればよいですか?
- 6. tomcatの画像へのアクセスを制御するにはどうすればよいですか?
- 7. どのようにC#からWin7のマイクとマイクブーストの設定をプログラムで制御できますか?
- 8. C#DLLアクセスの制御
- 9. symfony2のアクセス制御でregexを使用できますか?
- 10. どのように私はcassandraの複製を制御できますか?
- 11. 制御ファイル内のデータをどのように検証できますか?
- 12. 私はどのように電話を制御できますか?
- 13. mysqlpp接続メソッドのタイムアウト - どのように制御できますか?
- 14. .NETサービス参照のファイル名はどのように制御できますか?
- 15. SELECTドロップダウンの幅はどのように制御できますか?
- 16. angularJs内のビューへのアクセスの制御
- 17. Javaでのリソースのキャッシングをどのように制御しますか?
- 18. ルア - ファイルへのアクセスとアプリケーションの制御?
- 19. リピーター内の制御へのアクセス
- 20. .NETアセンブリへのアクセスの制御
- 21. Google Androidマップでオーバーレイアイテムのサイズをどのように制御しますか?
- 22. JMXローカル監視へのアクセス制御
- 23. idオブジェクトのポインタへのポインタにどのようにアクセスしますか?
- 24. フレームワークバージョンを使用して、コンパイルするもの(C#)を制御できますか?
- 25. C#でCドライブにアクセスするようにユーザーを制限しますか?
- 26. サイトアカウントごとにaws s3オブジェクトへのアクセスを制限するにはどうすればよいですか?
- 27. Umbraco - メンバーシップでメディアへのアクセスを制御する
- 28. メンバーへのポインタにアクセスできません。どうして?
- 29. どのようにWindowsシステムでサウンドを制御するには?
- 30. どのようにしてオブジェクトができますか?
私は**デバイスのポインタを返さない**を除きます。 DeviceManagerがライフスパンを管理している場合、またはスマートポインタを返して所有者の共有セマンティクスを呼び出し元に示す場合、呼び出し元が返されたデバイスの所有権を取得/共有するかどうかを示す場合に参照を返します。 –