什么时候会在单身中删除记忆?

时间:2014-12-19 11:22:18

标签: c++ singleton

我已经看过标准(大部分人都使用这个)单身设计模式,但是在这里我会被删除内存时感到困惑。

我们是否必须显式编写静态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;
}

3 个答案:

答案 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;
  }
}