C 单例为什么与其他go语言单例很不相同

(我是咕噜咕噜?)
(dandandan-)
(给我一个萝卜)
(只道寻常)
(道阻且长丶)
第三方登录:主题 : 求助C语言高人,这种宏定义的单例是什么意思?
级别: 精灵王
发帖: 1300
可可豆: 3259 CB
威望: 3303 点
在线时间: 1485(时)
发自: Web Page
来源于&&分类
求助C语言高人,这种宏定义的单例是什么意思?&&&
代码如下,这里面的##和每一行后面的\都代表什么意思呢?谢谢!#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \   \  static classname *shared##classname = nil; \   \  + (classname *)shared##classname \  { \   @synchronized(self) \      { \   if (shared##classname == nil) \           { \               shared##classname = [[self alloc] init]; \          } \       } \        \  &&return shared## \   } \    \  
级别: 精灵王
发帖: 3023
可可豆: 3353 CB
威望: 3331 点
在线时间: 4730(时)
发自: Web Page
空格 换行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
级别: 精灵王
发帖: 1300
可可豆: 3259 CB
威望: 3303 点
在线时间: 1485(时)
发自: Web Page
我查到的,##是粘接。。。。引用 引用第1楼noah-01-28 12:45发表的&&:空格 换行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
C语言实现的单例模式的解惑
关键字:C语言
  在实现饿汉式单例模式时,java和c#在类中声明静态私有成员实例并new
  在c++中,声明的静态成员如果使用new之后,本想在类析构中delete掉自己,但是在调试时发现此法不可行.因为在析构函数中调用delete会导致,析构函数被递归调用,当调用堆栈满时就会产生异常。
  代码如下:
  View Code
  class Singleton
  public:
  ~Singleton()
  if(instance)
  instance = NULL;
  static Singleton* getInstance()
  if(instance == NULL)
  instance = new S
  private:
  Singleton(){}
  static Singleton*
  Singleton(const Singleton&);
  Singleton& operator=(const Singleton&);
  Singleton* Singleton::instance = NULL;
  尝试第一种方法:在类中增加一个成员函数Suicide(),那么使用单例类的客户代码要主动调用suicide()否则还是会出现没有释放对象而导致的内存泄漏
  View Code
  class Singleton
  public:
  ~Singleton()
  // if(instance)
  // instance = NULL;
  //    }
  static Singleton* getInstance()
  if(instance == NULL)
  instance = new S
  void Suicide()
  instance = NULL;
  private:
  Singleton(){}
  static Singleton*
  Singleton(const Singleton&);
  Singleton& operator=(const Singleton&);
  Singleton* Singleton::instance = NULL;
  那么现在仍然没有解决上面的问题。
  根据c++语言的特性,变量离开作用域后会自动调用析构函数,从而有了智能指针。
  使用std中的shared_ptr,客户端的代码就会修改为对shared_ptr 实例的操作
  至此貌似解决了单线程情况下的单例构造。
  还有其他的单线程下的单例实现方式吗?
  对于C++来说有,也是最常用的。在类的静态函数中定义一个静态类实例。在程序结束后,该静态实例会被自动析构
  class Singleton
  public:
  ~Singleton(){}
  static Singleton& getInstance()
  static S
  private:
  Singleton(){}
  Singleton(const Singleton&);
  Singleton& operator=(const Singleton&);
[ 责任编辑:之极 ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte17:38 提问
for循环判断语句后加输出后,为啥是死循环啊
int main()
for(i = 0;i & 5,puts("**");i++);
为啥是个死循环啊,不停打印**
按赞数排序
C语言中puts函数调用成功返回值为**非负值**,这样你在for循环里面写条件的时候,虽然逗号前在五次之后会失败,但是逗号后puts返回值一直为TRUE,这样循环就会一直下去了
for语句中条件没同时满足,就不会退出,
for(i = 0;i & 5;i++)
,puts("**");
这样不就完事了
C语言逗号表达式的值是逗号表达式最后一部分求值后的结果,你的for循环中i&5,puts("**"),puts("**")的返回值为真,整句逗号表达式的值为真,当然死循环了。貌似你掉到了C语言的一个小陷阱XD
for(i = 0;i & 5;i++)
puts("**");
这个建议也很好,很规范。
建议以后在()函数框内不要同时使用判断和输出语句,可以在下面用{ }来表示你想达到的结果,写这些东西忌复杂,越简单明了越好,方便以后修改。
我也刚开始学,还在这里面混分来着。。。
是不是i&5,puts("**")这个逗号表达式的值就是puts("**")为真,所有才是个死循环啊
我也刚开始学,还在这里面混分来着。。。
楼上也才开始学吗 我也是啊》。。。。
其他相关推荐

我要回帖

更多关于 go语言单例 的文章

 

随机推荐