【发布时间】:2015-06-03 02:40:47
【问题描述】:
这是一个简单的单例:
class Singleton
{
Singleton();
virtual ~Singleton();
Singleton * Singleton::getInstance()
{
static Singleton * instance;
if (!instance) {
instance = new Singleton();
};
return instance;
};
}
主代码第一次调用Singleton::getInstance()->someMethod()时,类不是实例化了两次吗?会不会有内存泄露?
我之所以问,是因为 Visual Leak Detector 检测到内存泄漏与 new Singleton()。
【问题讨论】:
-
这不是单例。
getInstance()不是静态成员,因此您需要至少一个 Singleton 类的对象来调用getInstance(),之后您有 两个 Singleton 对象。我不知道在哪里声明了实例,但似乎没有人delete它曾经。所以——是的,你有内存泄漏。 -
你应该在这里返回一个引用,
static Singleton&,并声明static Singleton instance;不需要额外的检查等,它也是从 C++11 开始的线程安全的。 -
@vsoftco:你有一个额外的
&。但你的观点非常好。 -
@LightnessRacesinOrbit 刚刚删除了它 :)
-
@vsoftco:我的答案偷了你的想法
标签: c++ memory-leaks singleton