Programmabsturz bei Templateverwendung (operator=)
-
Hallo liebe Gemeinschaft,
ich hab da ein merkwürdiges Problem bei meinem Klassentemplate.
template <typename T> class KlassenTemplate { public: KlassenTemplate(T*); T& operator* (); T& operator= (T&); private: T* pointer; };Realisiert sind die Methoden so:
template <typename T> KlassenTemplate<T>::KlassenTemplate(T* p) { p=NULL; } template <typename T> T& KlassenTemplate<T>::operator*() { return *pointer; } template <typename T> T& KlassenTemplate<T>::operator=(T& neu) { this=&neu; return this; }Wenn ich jetzt in der main.cpp
int main() { KlassenTemplate<int> p=new int; *p=3; }aufrufe, dann kompiliert das Programm zwar ordentich, stürzt aber mit einem Segmentation Fault ab.
Wo ich hier aber auf falschen Speicher zugreifen könnte, sehe ich nicht.Danke für eure Hilfe.
-
denk mal nach
in der definition des = ops weist du deinem pointer eine addresse zu
wäre kein problem aber dann darfst du nur variablen damit benutzenalso nur sowas
int main() { int i = 3; Klassentemplate<int> p = new int; *p = i; }allerdings ist das so wie du es schreibst nicht so ganz gut glaube ich
-
althippie schrieb:
[...] dann kompiliert das Programm zwar ordentich
Welcher Compiler (zum Henker) kompiliert
this = &neu?!?Und im Konstruktor schau nochmal genau hin welchem Pointer Du NULL zuweist.
-
Habe mir eure Tipps zu Herzen genommen.
Es ist natürlich Blösinn im Konstruktor die Adresse der Variablen T auf NULL zu setzen!!
Gemeint ist natürlich, dass der pointer jetzt auch auf T zeigt. Damit hat es hervorragend geklappt.
Als Kompiler nutze ich g++-4.3.2
Danke nochmal!