MEC++: Limitare il numero di oggetti

Appunti tratti dalla rilettura di More Effective C++ di Scott Meyers. Quinto blocco: Tecniche.

(26) Limitare il numero di oggetti per una data classe.

Per impedire di instaziare oggetti di una classe basta dichiarare privati, e non definire, i costruttori della classe:

class CantBeInstantiated {
private:
CantBeInstantiated();
CantBeInstantiated(const CantBeInstantiated&);

// ...

};


Per avere un solo oggetto, lo dichiariamo statico, all'interno della classe, e facciamo in modo che possa essere acceduto solo da una apposita funzione (statica), mantenendo privati i costruttori:

#include <iostream>
using namespace std;

class Printer {
public:
static Printer& getInstance();

void print() {
cout << "printing" << endl;
}

private:
Printer() {}
Printer(const Printer& rhs);

};

Printer& Printer::getInstance()
{
static Printer p;
return p;
}


int main() {
Printer& p = Printer::getInstance();
p.print();
}

Per gestire un numero limitato di oggetti, dobbiamo ricorre alle eccezioni. Lo schema prevede che il costruttore ne alzi una se il contatore che tiene traccia del numero di oggetti creati ha raggiunto il limite, altrimenti lo incrementa. Il distruttore decrementa il contatore.

Il rischio di questo schema é che gli oggetti potrebbero non essere distrutti correttamente.

Nessun commento:

Posta un commento