среда, 11 февраля 2009 г.

Problem with a Meyers Singleton

Для начала напомним как выглядит этот Meyers Singleton:


// singleton.h
#ifndef __SINGLETON_H
#define __SINGLETON_H

template <class T>
class Singleton
{
public:
static T& Instance() {
static T _instance;
return _instance;
}
private:
Singleton(); // ctor hidden
~Singleton(); // dtor hidden
Singleton(Singleton const&); // copy ctor hidden
Singleton& operator=(Singleton const&); // assign op hidden
};

#endif
// eof


Но есть у меня один класс, который наотрез отказывается с ним работать! Но только в Release сборке! Instance() возвращает два разных обьекта!
Зато прекрасно работает с таким вариантом:

template <class T> class Singleton
{
protected:
static T _instance;

public:
static T& instance()
{
return _instance;
}

private:
Singleton();
~Singleton();
Singleton(Singleton const&); // copy ctor hidden
Singleton& operator=(Singleton const&); // assign or hidden
};

template<class T> T Singleton<T>::_instance;


Интересная статья с интересными линками.

И еще кое-что:
Singleton Class Private Constructor, C# Singleton Class, and More
Paul DiLascia

Singleton classes are even easier in C# than they are in C++ because the .NET Framework has the notion of singletons built in. Here's the C# Singleton pattern distilled:

sealed class Singleton
{
private Singleton() { }
public static readonly Singleton
TheInstance = new Singleton();
}

Комментариев нет:

Отправить комментарий