Hej NG
Jeg er for nylig begyndt at rode med singletons (mest for at lære det), og
nu er der et par spørgsmål, der dukker op, som jeg tror, I kan hjælpe mig
med. Det drejer sig om, at jeg gerne vil have en Singleton klasse, der
bruger templates. Fx noget meget simpelt i retning af:
<->
template <typename T> class Singleton
{
public:
static T& GetInstance();
static T* GetInstancePtr();
protected:
static T* m_pInstance;
Singleton();
};
<->
Mit spørgsmål går på, hvorledes jeg så sikrer, at det kun er GetInstance(),
GetInstancePtr() eller måske evt. en Create()-funktion, der kan oprette en
instans af klassen. Copy constructoren skal også være protected går jeg ud
fra, men skal = operatoren det også?
Er det desuden nødvendigt at deklarere disse (constructor, copy constructor
og operator=) som protected i nedarvede klasser for at undgå, at compileren
selv genererer dem og dermed bl.a. opretter en public default constructor?
Så vidt jeg kan se ud fra mine eksperimenter, er det nødvendigt, men er der
en vej uden om dette?
En sidste ting. Er det smart fx at have en Create() og evt. en Destroy()-
funktion, som tager sig af at oprette/fjerne instansen, eller kan jeg nøjes
med bare at lade GetInstance[Ptr]() oprette den ved første kald?
Venlig hilsen
Christian Larsen
|