Singleton模式的静态局部变量的问题

//”TestSingleton.h”
class TestSingleton
{

TestSingleton& Instance(){static TestSingleton myTest; return myTest;}

}
       这是Singleton的写法,请问有问题么?
也许有,也许没有。看你的运气了。这样的做法真是让自己命悬一线。可怕的错不是那种狰狞的错误,而是这样的细微的错误.
看到问题了么?
啊哈!这样的代码会不会出问题,完全看您的编译器了。那么我们先回顾一下局部静态变量。局部静态变量的特点是在第一次访问的时候初始化,然后就可以使用这个变量。那么这个局部变量就被用作Singleton的对象。
那么,我们再回顾一下编译器的特点。对有优化的功能的编译器,那么它可能对在类中实现的成员函数自动inline,当然这是可能。我们做Singleton的目的是让对象只存在一个(废话)。
呵呵,问题出现了,如果编译器把Instance()函数inline一下会怎么样?好可怕。这件事情花了我一个下午的时间查找。
平心而论,这样的代码我不会写;然而让我之前一眼能看出这样的问题,我只能说我不能。
 
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值