geschrieben Einige man die Fragen zu diesem Muster, aber mit nicht der Lösung der in meinem Kopf gestellten Frage so mit den Abfragen Entsendung ich habe ...Verwirrung mit Beispiel Erklärung von Prototype Mustern in C++
In obigem Beispiel, wenn Alle Instanzen werden durch die Variable s_prototypes initialisiert und das nächste Mal, wenn irgendein Objekt davon durch das neue Objekt in der Klonmethode ersetzt wird, was wird dann mit dem existierenden Objekt geschehen? Wird es Speicherlecks erzeugen?
Soweit ich von oben Beispiel zwei Aussage verstehen verwechselst mich
class Stooge {
public:
virtual Stooge* clone() = 0;
virtual void slap_stick() = 0;
};
class Factory {
public:
static Stooge* make_stooge(int choice);
private:
static Stooge* s_prototypes[4];
};
int main() {
vector roles;
int choice;
while (true) {
cout << "Larry(1) Moe(2) Curly(3) Go(0): ";
cin >> choice;
if (choice == 0)
break;
roles.push_back(
Factory::make_stooge(choice));
}
for (int i=0; i < roles.size(); ++i)
roles[i]->slap_stick();
for (int i=0; i < roles.size(); ++i)
delete roles[i];
}
class Larry : public Stooge {
public:
Stooge* clone() { return new Larry; }
void slap_stick() {
cout << "Larry: poke eyes\n"; }
};
class Moe : public Stooge {
public:
Stooge* clone() { return new Moe; }
void slap_stick() {
cout << "Moe: slap head\n"; }
};
class Curly : public Stooge {
public:
Stooge* clone() { return new Curly; }
void slap_stick() {
cout << "Curly: suffer abuse\n"; }
};
Stooge* Factory::s_prototypes[] = {
0, new Larry, new Moe, new Curly
};
Stooge* Factory::make_stooge(int choice) {
return s_prototypes[choice]->clone();
}
Output
Larry(1) Moe(2) Curly(3) Go(0): 2
Larry(1) Moe(2) Curly(3) Go(0): 1
Larry(1) Moe(2) Curly(3) Go(0): 3
Larry(1) Moe(2) Curly(3) Go(0): 0
Moe: slap head
Larry: poke eyes
Curly: suffer abuse
Aber wenn wir Klon-Methode make_stooge Methode aufrufen, wird es neue Objekt zurück, Wenn das neue Objekt zurückgibt und ersetzt sie durch bestehende dann das vorhandene Objekt hier Speicherleck schaffen wird (weil neue Betreiber vollständig separates Objekt erstellt und nicht wieder eine hier vorhandene) ....
so dieses Ding ist mir bei diesem Beispiel verwirrend ....
* Wenn das zurückgibt neues Objekt und ersetzt sie durch bestehende * - das ist nicht in Ihrem Code geschrieben geschieht. –