大规模高性能网络服务器编程 大型游戏服务器编程 完成端口模型 TCP UDP P2P 网络编程
posted on 2010-08-31 15:56 iKusamba 阅读(1460) 评论(10) 编辑 收藏 引用 所属分类: C++技术
MySingleton& GetSingleton() { static MySingleton singleton; return singleton; } 回复 更多评论
@陈梓瀚(vczh) 这是最常见的Meyers Singleton,有些编译器可能会出错,还有析构时间没有办法控制,可能会导致K.D.L方面的问题 我的想法是避免多线程和内存方面的问题 回复 更多评论
1. 既然对象肯定要用到而且会在main()里边析构,那么用一个全局的指针不就行了?在main()里边构造一个局部对象,把全局指针指向它。完全不必用宏,也不必手动释放对象。2. 为了防止在别处意外构造对象,把构造函数的参数定为 enum YouShouldNotConstructTheObjectUnlessInMain,这样一搜源代码就知道有没有人故意误用。3. 为什么要默认使用虚析构?既然构造函数是private的,说明根本不可能创建派生类的对象,虚析构意义何在? 回复 更多评论
我觉得我们是否更应该去避免这些问题的产生,而不是去想法来解决“会出现”的问题呢。 回复 更多评论
@陈硕感谢你提出的问题,我来逐条解释下“1. 既然对象肯定要用到而且会在main()里边析构,那么用一个全局的指针不就行了?在main()里边构造一个局部对象,把全局指针指向它。完全不必用宏,也不必手动释放对象。”"2. 为了防止在别处意外构造对象,把构造函数的参数定为 enum YouShouldNotConstructTheObjectUnlessInMain,这样一搜源代码就知道有没有人故意误用。"答:全局变量和带参数的构造函数也是可以用的,这里讨论的是singleton“3. 为什么要默认使用虚析构?既然构造函数是private的,说明根本不可能创建派生类的对象,虚析构意义何在?”答:对象可能会有父类 回复 更多评论
@cpp你说的也对,我觉得借助好的想法,好的框架再加上“更应该去避免这些问题的产生”,能事半功倍! 回复 更多评论
@iKusamba 那就加CriticalSection哈,就没事了。反正肯定会在main之后析构的,这个也不用控制了。如果你想控制,那还是给你的singleton类加上“Close()”。 回复 更多评论
@iKusamba 应该是“ExceptInMain”哈,Unless是不对的…… 回复 更多评论
@陈梓瀚(vczh)在内部有static的Destroy()如果singleton中有new,可以在析构函数中清除 回复 更多评论
我发现模式里面讨论的最多的是单例,其实单例也就那么一回事。线程安全好像讨论的最多,线程安全各有各的说法,有没有更加有力的说法? 回复 更多评论