想象一下,我有一個設備類。我不希望程序員能夠實例化他自己的Device對象,所以現在我創建一個DeviceManager類。 DeviceManager是唯一實例化的實體,通過讓程序員指定某種類型的ID,程序員可以訪問Device對象。這樣,只有DeviceManager類需要由程序員清理,並且不會留下任何流浪的Device對象。我主要關心的是如何控制訪問對象的好處垃圾收集的利益。像我在C++中描述的一個好主意一樣,是一個「管理者」模式嗎?謝謝!如何控制對C++中對象的訪問?
0
A
回答
2
如果你真的需要它,是的。
爲了實現這種控制,可以使Device
private
的構造,並宣佈DeviceManager
作爲Device
類保護。
class Device
{
private: //not necessary, private by default
Device();
friend class DeviceManager;
};
class DeviceManager
{
public:
Device* getDevice();
};
你也可以返回一個智能指針到Device
(推薦),並保持創建的設備的DeviceManager
內,這取決於你所需要的。
這被稱爲實例管理器模式。 DeviceManager
也是設備的工廠。另外,C++沒有垃圾回收功能,但是如果你使用智能指針,你不需要擔心內存管理。
0
我們可以通過使用Private構造函數來實現這一點。 私有構造函數是一種特殊的構造函數。它常用於只包含靜態成員的類。如果一個類有一個或多個私有構造函數並且沒有公共構造函數,則其他類不允許創建此類的實例。 對於e.g
class abc
{
private abc()
{}
}
空構造的聲明防止自動生成一個缺省的構造的。請注意,如果您在構造函數中不使用訪問修飾符,則默認情況下它仍然是私有的。但是,私有修飾符通常用於明確說明該類不能被實例化。
當沒有實例字段或方法(如Math類)或調用方法以獲取類的實例時,私有構造函數用於防止創建類的實例。如果類中的所有方法都是靜態的,則考慮將整個類設爲靜態。
相關問題
- 1. 對象的訪問控制
- 2. 如何在對象控制器中訪問對象模型(「init」)
- 3. c#:控制對來自不同線程的對象的訪問
- 4. 如何訪問C中的父對象#
- 5. 如何控制多個線程對一組對象的訪問?
- 6. 訪問對象的JavaScript控制檯
- 7. 限制對S3中對象的訪問
- 8. 訪問對象C++
- 9. 控制檯訪問paper.js對象
- 10. 對象存儲訪問控制API
- 11. Java - 用戶對象訪問控制
- 12. 從控制器訪問nib/xib對象
- 13. 從對象訪問控制器
- 14. 對python對象中數據字段的訪問控制
- 15. 如何在web2py中實現對象/記錄級訪問控制?
- 16. 如何在grails控制器中訪問用戶對象
- 17. 如何在AngularJS控制器中訪問Firebase對象
- 18. 對象的C不能訪問視圖 - 控制
- 19. 如何從C#中的對象訪問嵌套鍵值對?
- 20. 如何訪問InterJson對象對象值
- 21. 如何限制訪問對象?
- 22. 如何限制用戶訪問對象?
- 23. C++如何訪問元素對象
- 24. 如何訪問JSON對象在C#
- 25. 控制Django auth用戶對特定對象實例的訪問
- 26. JSF對直接對象的訪問控制
- 27. 如何從控制檯訪問Backbone對象?
- 28. 如何從Javascript中的參數訪問對象中的對象?
- 29. 如何訪問javascript中的空對象中的嵌套對象
- 30. 控制對JAR中類的訪問
除了我會**不**返回指向設備的指針。如果DeviceManager管理壽命或返回一個智能指針以向呼叫者指示所有權共享語義,則返回引用,從而指示呼叫者是否獲取/共享返回設備的所有權。 – 2012-03-15 21:08:49