Moin,
ich muss zur Zeit für die Uni in C++ programmieren. Was mir dabei Probleme macht, ist - natürlich - die Speicherverwaltung. Ich würde das gerne irgendwie sauber (OOP! auch wenn der Prof da nicht viel davon hält...
), halbwegs performant und ohne Hilfe von Frameworks (weil es eben Uni-Abgaben sind) hinkriegen.
Meine Frage ist: Gibt es irgendwelche sinnvollen Faustregeln, wie man programmieren sollte - insbesondere, zu welchem Zeitpunkt man Speicher wieder freigeben sollte?
(Ich weiß doch, dass es hier auch einige C++ Veteranen gibt
)
Mal kurz mein konkretes Problem: Ich verwende eher kleinere, immutable Klassen und versuche nach Möglichkeit
zu vermeiden, damit die Objekte automatisch wieder gelöscht werden. Ich habe allerdings eine Klasse "WaveFunction", die mit einem potentiell sehr großen
hantiert. Diesen will ich nicht dauernd in der Gegend rumkopieren. Hab ich also einen Pointer drausgemacht, und dann kam zunächst (gekürzt) folgendes raus:
Naja, das ist jetzt halt offensichtlich problematisch: Wenn irgendwo mal ein WaveFunction-Objekt by-value übergeben wird, und das eine der Objekte dann wieder gelöscht wird, wird gleich der Vektor mitgelöscht... Aber wie mache ich das denn sonst?
ich muss zur Zeit für die Uni in C++ programmieren. Was mir dabei Probleme macht, ist - natürlich - die Speicherverwaltung. Ich würde das gerne irgendwie sauber (OOP! auch wenn der Prof da nicht viel davon hält...
Meine Frage ist: Gibt es irgendwelche sinnvollen Faustregeln, wie man programmieren sollte - insbesondere, zu welchem Zeitpunkt man Speicher wieder freigeben sollte?
(Ich weiß doch, dass es hier auch einige C++ Veteranen gibt
Mal kurz mein konkretes Problem: Ich verwende eher kleinere, immutable Klassen und versuche nach Möglichkeit
Code:
new
Code:
std::vector<complex<double>>
Code:
#include <vector>
using std::vector;
#include "cmp.h"
class WaveFunction {
private:
vector<cmp> const * const values;
WaveFunction(vector<cmp> const *values_)
: values(values_) {}
public:
static WaveFunction create(int N);
virtual ~WaveFunction() {
delete values; // <---- ???
}
};
WaveFunction WaveFunction::create(int N) {
vector<cmp>* values = new vector<cmp> (N);
// werte berechnen...
return WaveFunction(values);
}
Naja, das ist jetzt halt offensichtlich problematisch: Wenn irgendwo mal ein WaveFunction-Objekt by-value übergeben wird, und das eine der Objekte dann wieder gelöscht wird, wird gleich der Vektor mitgelöscht... Aber wie mache ich das denn sonst?