Frage

Ich möchte das Objektpool -Designmuster für meine Bibliothek verwenden, damit der Benutzer nicht mehr als eine vordefinierte Anzahl von Objekten erstellen kann.
Wie kann ich den Benutzer dazu zwingen, die Poolklasse für die Erwerb einer Instanz anstelle des Konstruktors der Ressource zu verwenden?

Ich kann den Ressourcenkonstruktor nicht privat erklären, da die Poolklasse dann auch die Instanz erstellen kann ...

Vielen Dank

War es hilfreich?

Lösung

Verwenden Sie Komposition und eine Klasse, die die Sammlung hält. Wenn Sie ihnen einen Wrapper -Typ um die Sammlung geben, der die Sichtbarkeit anpasst und die Objekterstellung beginnt.

Wenn Sie die Ressourcenerstellung noch weiter einschränken möchten, können Sie mit diesem Ansatz ohne Freundschaft binden (nachdem Sie die Kommentare von C ++/Freund gesehen haben):

class t_resource {
private:
    t_resource();
public:
    ~t_resource();

    static void AddToResourcePool(t_resource_pool& resourcePool) {
        if (resourcePool.isFull()) {
            /* error */
        }
        else {
            resourcePool.addResource(new t_resource);
        }
    }
};

Andere Tipps

Der Pool nicht brauchen von der Klasse selbst getrennt zu sein, oder die Klasse könnte sich in einem Pool zusammensetzen, usw.

Instanzen würden aus dem (in sich geschlossenen) Pool des Objekts wie einem Singleton abgerufen, aber ein How-Ever-Many-You-Want-Eton.

Sie könnten auch Spiele mit Sichtbarkeit spielen, aber wie dies zu tun ist n Objekte statt eines.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top