Существует статический указатель aSingletonClass * instance_ и статическая функция void deleteInstance (void), объявленная в коде 1.
Я реализовал Код 2 без использования статического указателя и статической функции (я думал, что Singleton может быть достигнут без него, но я не уверен !!!)
Пожалуйста, сообщите мне, может ли это изменение быть опасным, и в этом случае моя программа может аварийно завершить работу.
Код 1:
class aSingletonClass
{
public:
static aSingletonClass *getInstance( void )
{
if(!instance_)
instance_ = new aSingletonClass;
return instance_;
}
static void deleteInstance()
{
if(instance_)
delete instance_;
instance_ = NULL; //important as this can create dead reference problems
}
private:
static aSingletonClass *instance_;
aSingletonClass() {};
~aSingletonClass() {};
};
int main()
{
aSingletonClass *someVar = NULL;
someVar = aSingletonClass::getInstance();
aSingletonClass::deleteInstance();
return 0;
}
Код 2:
class A
{
int x;
A(int a)
{ x=a; }
~A()
{ }
public:
static A* start()
{
A* ptr1 = new A(3);
return (ptr1);
}
void end()
{
delete this;
}
};
int main()
{
A* ptr=A::start();
ptr->end();
}