我已经看过标准(大部分人都使用这个)单身设计模式,但是在这里我会被删除内存时感到困惑。
我们是否必须显式编写静态delete()函数并在最后删除内存?
class ST
{
static ST* instance;
ST(){};
private :
static ST* getInstance();
};
ST* ST::instance = NULL;
ST* ST::getInstance()
{
//lock on mutex
if(NULL == instance)
{
instance = new ST();
}
return instance;
}
答案 0 :(得分:3)
是的,内存不会自动释放。 也许,如果你想释放单例内存,在这种情况下最好的方法是用函数调用atexit,释放单例。 如果您使用C ++ 11,最好的方法是使用Meyers singleton。
ST& ST::getInstance()
{
static ST instance;
return instance;
}
答案 1 :(得分:0)
如果您希望应该有单个类实例,那么您可以创建Singleton,并且该安装不会在应用程序结束前消失。所以,你可以删除它,因为你有指针,通常你不会。
因此,对象将(应该)持续到应用程序结束。
答案 2 :(得分:0)
要销毁实例,您将需要一个静态函数,用于删除指针并将其设置为NULL,以便将来调用getInstance()将正确实例化一个新对象。
以下只会创建一个无限循环
ST~ST()
{
delete instance;
}
所以我们最终得到以下
class ST
{
static ST* getInstance();
static void destroyInstance();
private :
static ST* instance;
ST(){};
~ST(){};
};
ST* ST::instance = NULL;
ST* ST::getInstance()
{
//lock on mutex
if(NULL == instance)
{
instance = new ST();
}
return instance;
}
void ST::destroyInstance()
{
//lock on mutex
if(NULL == instance)
{
delete instance;
instance = NULL;
}
}