PDA

Visualizza la versione completa : Pillola: [C++] Permettere una sola istanza di una classe (Singleton)


lucasp
22-05-2002, 19:04
A volte può essere necessario fare in modo che sia possibile creare una ed una sola istanza di una determinata classe. In questo caso è possibile usare una tecnica chiamata singleton.


Ecco come risolvere il problema. Si noti l’importanza del costruttore di default privato; è importante che nessun costruttore sia dichiarato pubblico, altrimenti la tecnica non funzionerà.


class Singleton {
Singleton() { } // il costruttore è privato!
public:
static Singleton& Get() {
static Singleton s; // dato che è statico verrà creato UNA sola volta
return s;
}
};


In questo modo si potrà accedere all'istanza della classe attraverso il metodo Singleton::Get().
Ovviamente occorrerà modificare il listato qua sopra in modo da renderlo adatto alle proprie esigenze, aggiungendo variabili e funzioni membro opportune.


Aspetto i vostri commenti e le eventuali correzioni



:sexpulp:

lucasp
22-05-2002, 19:48
:quote:

lucasp
22-05-2002, 20:29
Niente commenti :master: ?

lucasp
22-05-2002, 20:37
Originariamente inviato da McAuriel V
io uso la direttiva in precompilazione

#ifndef _CLASSE_A_

Molto interessante, fammi un esempio di codice:sexpulp:

Andrea Simonassi
27-05-2002, 15:16
Corretto!
Potrebbe essere valida una modifica del tipo, imporre un numero massimo di istanze contemporanee. Ad esempio un software che dovesse usare delicate risorse di sistema, potrebbe essere creato in modo da generare un max di 20 istanze (ad esempio connessioni di rete per evitare collasso) e sollevare un'eccezione quando il numero di oggetti richiesto è troppo alto.

try{
ClasseX c = ClasseX("connettiti al pc di pippo");
}
catch(ErrRisorseFinite)
{
cerr << "Il sistema gn'a fa più!" << endl;
}

lucasp
27-05-2002, 15:21
ottima idea!!!

P.S: ma tu quanti anni hai??????

Andrea Simonassi
27-05-2002, 15:25
28

lucasp
27-05-2002, 15:30
Originariamente inviato da Andrea Simonassi
28

:eek:


Ma che universita hai fatto, se la hai fatta???????????? e come scuola superiore?????

Andrea Simonassi
27-05-2002, 16:27
L'università della vita vale come risposta?

A parte gli scherzi sono ragioniere, da due anni ho ripreso a studiare (CDL in Informatica), come informatico, invece, sono completamente autodidatta (a parte l'università ovviamente :)).

All'università ti puoi iscrivere anche a 80 anni (lo dice la Costituzione della Repubblica).

Come mai ti interessano i miei trascorsi? Sei mica del fisco? Non esisteva una legge sulla privacy?

TheGreatWorld
13-02-2003, 00:18
Uhm, perdonami, ma credo tu abbia usato il termina istanza un po impropriamente. Non ho capito una cosa: per unica istanza vuoi intendere che ogni oggetto istanziato di quella determinata classe si riferirà sempre ad uno stesso oggetto o vuoi dire che con questo metodo è possibile instanziare una sola volta la classe, dopo di che si riceve un errore di compilazione o affini? Te lo chiedo perche' il discorso è un attimino diverso... molto interessante invece la tecnica del lanciare una eccezione in caso di eccedenza di instanziamenti.

bye

Loading