Конечно, это вызывает бесконечный цикл!
Вы вызываете деструктор, но деструктор также вызывает деструктор, поэтому деструктор снова вызывает деструктор ... и снова ...
Если вы хотите использовать delete
, вы должны использовать его из вне деструктора и НЕ вызывать его снова в деструкторе.
Для этого вы можете использовать другой статический метод, который будет отражать метод GetInstance()
:
class Singleton
{
public :
...
// this method is a mirror of GetInstance
static void ResetInstance()
{
delete m_pInstance; // REM : it works even if the pointer is NULL (does nothing then)
m_pInstance = NULL; // so GetInstance will still work.
}
...
~Singleton()
{
// do destructor stuff : free allocated resources if any.
...
}
Примечание: другие люди предупреждают вас об использовании синглтона, и они правы, потому что этот шаблон часто используется неправильно. Поэтому подумайте, прежде чем использовать его. Но все равно продолжайте, это хороший способ учиться!