首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨平台代码组织

跨平台代码组织
EN

Stack Overflow用户
提问于 2011-08-25 00:54:38
回答 4查看 117关注 0票数 0

我有一个监视器类,它通过一个静态函数来访问它自身的实例。当调用GetMonitor时,将搜索mMonitors映射并返回实例,如果实例不存在,则创建该实例。

代码语言:javascript
复制
class Monitor {
    public:
        static Monitor& GetPrimaryMonitor();
        static Monitor& GetMonitor(int number = 0);
        int GetXResolution();
        int GetYResolution();
        void SetXResolution(int resolution);
        void SetYResolution(int resolution);

    protected:
    private:
        Monitor(int number);
        static std::map<int, Monitor*> mMonitors;
};

我的问题是,我应该在什么时候删除地图中保存的Monitor实例?或者我应该采取一种不同的方法,允许用户创建他/她想要的任意数量的监视器实例?这似乎是错误的,因为这就好像他们将创建一个物理监视器,而我的方法提供了对已经可用的共享资源的访问。先谢谢你,艾尔。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-25 01:24:43

我应该采取一种不同的方法,允许用户创建他/她想要的任意数量的监视器实例吗?这似乎是错误的,因为这就好像他们将创建一个物理监视器,而我的方法提供了对已经可用的共享资源的访问

是的,你绝对应该这样做。出于几个原因:

  • 你给用户的是一个监视器的抽象,而不是一个真正的物理监视器。因此,拥有与实际物理monitors.
  • Different不同数量的监视器对象不一定是错误的。monitors
  • People用户可能具有不同数量的虚拟监视器,或者可能是用于测试的模拟实现,这些实现永远不会与all.
  • singletons的物理监视器是just a plain horrible idea.

对应的

票数 1
EN

Stack Overflow用户

发布于 2011-08-25 01:28:30

我建议远离单例,特别是如果它们是用静态实现的。这种模式的含义一开始并不明显,但可能会使事情变得复杂(例如,如果您有多个二进制文件、DLL、关心特定的销毁顺序等)。

您应该尝试重新设计,以便可以在代码中传递此Monitor实例(某种依赖注入),而不是将其作为单例(实际上,这是OO中滥用最多的模式)。

票数 1
EN

Stack Overflow用户

发布于 2011-08-25 01:17:36

您不需要删除监视器的实例(考虑到您不会有那么多监视器设备连接到您的系统,这不是问题)。但如果你真的想这样做,你可以在它们各自的设备断开连接后立即删除它们。

关于实例的创建,您可以保持相同的方法。您可以在用户请求新对象(1)或连接新的监视器设备时(2)实例化新对象。如果可以将监控设备连接到系统,但在您的应用程序上下文中什么也不做,我会使用(1)。另一方面,如果每次新的监视器设备连接到系统时,您的应用程序都需要获得设备的分辨率,我会使用(2)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7179312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档