Suche geeignetes Design Pattern
-
Nein, nicht new ohne delete, sondern delete ohne new. Entschuldigung für den Vertauscher.
-
Mit
void setParameter(struct ParameterA ¶meter);und
int operate(int &input);signalisierst du dem Benutzer, dass du vorhast, den inhalt der übergebenen Argumente innerhalb der Funktion zu ändern, tust du ja aber gar nicht.
void setParameter(const ParameterA& parameter);wäre also schöner.
operate kannst du auch so machen:int operate(int input);da es bei ints keinen Sinn hat, sie per ref to const zu übergeben.
Achja, ist das jetzt schon der dritte Thread, indem du durch deinen Memleakerei die Leute dabei behinderst, dir bei deiner eigentlichen Frage zu helfen?
Ok, der gute Wille mit dem delete im dtor ist da, passt aber nicht. Die Zeiger könnten nicht initialisiert sein. Mach aus void initialize einen ctor, benutze initializer lists, usw. Mit anderen Worten: Lern C++. Du wirst wenig Spaß am Rumdesignpattern haben, wenn die Basics noch nicht sitzen.
-
Ich würde auch sagen, dass es grob nach dem Strategy Pattern ausschaut, aber so wirklich tief hab ich mich da jetzt nicht reingedacht.
-
Erstmal danke an alle, die mir den Ratschlag geben erstmal C++ zu lernen. In manchen Situationen hat man jedoch nicht die Möglichkeit sich gemütlich und in Ruhe in eine Materie einzulesen und fängt in der Mitte an, schaut dann ans Ende um anschließend am Anfang zu gucken was man alles falsch macht. Nennt man Softskilltraining by the job

Die deletes waren mehr oder weniger eine Verlegenheitstat. Da ich nicht wirklich weiß ob ich ClassA und ClassB benötige, habe ich sie nicht im Konstruktor initialisiert. Eigentlich sollen nur Objekte einer Klasse erzeugt werden, die auch benötigt werden.
Ich müsste einfach mal gucken welche Objekte auch wirklich vorhanden sind und diese zerstören.
-
Davon abgesehen, dass Du Smartpointer für so was verwenden solltest, kannst Du es so gestalten:
class Class { private: A* a; B* b; // Bei verwendetem destructor operator= und copy-ctor privatisieren // oder überschreiben Class& operator=(const Class&); Class(const Class&); public: Class(); void methThatNeedsA(); void methThatNeedsB(); ~Class(); }; Class::Class() : a(nullptr), b(nullptr) {} void Class::methThatNeedsA() { if(!a) a = new A; // ... } void Class::methThatNeedsB() { if(!b) b = new B; // ... } void Class::~Class() { delete a; // delete auf nullptr hat keinen Effekt, ist also ok delete b; }
-
Template Method könnte auch eine Möglichkeit sein. Der Unterschied zu Strategy ist fein, aber Designmässig könnte eine Unterscheidung Sinn machen.
-
Zisko schrieb:
Erstmal danke an alle, die mir den Ratschlag geben erstmal C++ zu lernen. In manchen Situationen hat man jedoch nicht die Möglichkeit sich gemütlich und in Ruhe in eine Materie einzulesen und fängt in der Mitte an, schaut dann ans Ende um anschließend am Anfang zu gucken was man alles falsch macht. Nennt man Softskilltraining by the job

Soft Skills kenn ich nur als soziale Kompetenz, aber gut, das ist ja nebensächlich.
Du programmierst noch nicht lange (auch nicht Java), oder? Weil spätestens nach einigen Jahren merkt man normalerweise, dass man mit dem Ansatz eigentlich nur mehr Zeit benötigt, und dafür schlechtere Ergebnisse bekommt, auch wenn es anfangs den Anschein hat, man würde schneller voran kommen.
-
Dobi schrieb:
Zisko schrieb:
Erstmal danke an alle, die mir den Ratschlag geben erstmal C++ zu lernen. In manchen Situationen hat man jedoch nicht die Möglichkeit sich gemütlich und in Ruhe in eine Materie einzulesen und fängt in der Mitte an, schaut dann ans Ende um anschließend am Anfang zu gucken was man alles falsch macht. Nennt man Softskilltraining by the job

Soft Skills kenn ich nur als soziale Kompetenz, aber gut, das ist ja nebensächlich.
Du programmierst noch nicht lange (auch nicht Java), oder? Weil spätestens nach einigen Jahren merkt man normalerweise, dass man mit dem Ansatz eigentlich nur mehr Zeit benötigt, und dafür schlechtere Ergebnisse bekommt, auch wenn es anfangs den Anschein hat, man würde schneller voran kommen.
Bedingt. Natürlich fällt man mit C++ die ganze Zeit auf die Nase, wenn man das nicht kann. Aber stell dir einfach mal vor, du bist Vollzeitjavaentwickler mit 10 Jahren Berufserfahrung und hast noch nie was mit C++ gemacht. Dann kommt dein Chef und sagt, unser C++ Entwickler hat gekündigt, und jetzt musst du SOFORT sein Projekt übernehmen und 20 Sachen fixen und 5 neue Features einbauen. Dann wirst du schlecht sagen können, ok, aber erstmal brauch ich ein halbes Jahr, um mich richtig in C++ einzulesen...
-
Der Chef muss halt dringend einen neuen C++-Programmierer besorgen, für so was gibt es Kündigungsfristen. Wenn der Javaentwickler plötzlich die ganzen C++-Projekte übernimmt, baut er überall Speicherfehler ein und das Teil bricht dann ständig zusammen... ziemlich heftig, wenn der Chef das toleriert bzw. das so bestimmt. Imo sollte der Chefchef sich Gedanken machen, ob der Chef die richtige Stelle besetzt...
-
Das war nur ein Beispiel als Antwort auf Dobis Aussage. Wollte damit nur sagen, falls der TE ein erfahrener Entwickler ist, könnte es trotzdem passieren, dass er in eine Situation kommt, wo er schnell was machen muss, ohne sich auszukennen.
Im übrigens ist es überhaupt nicht unrealistisch, dass sowas passiert. Ich hab z.B. Sachen in Python anpassen müssen, obwohl ich kein Python konnte. Hab auch nicht gesagt, erstmal paar Monate einlesen... Python ist zwar nicht C++, aber die Wahrscheinlichkeit, dass man in so eine Situation kommt ist schon gegeben.
So, genug offtopic. Das Threadthema an sich ist nicht so uninteressant, hier ständig irgendwas anderes auszudiskutieren
