"operator char*" vs. "toCharPtr()" - Unterschiedliches Verhalten?

the snake II

Erfahrenes Mitglied
Hallo zusammen,

weil ich in meinem Programm mit mehreren verschiedenen String-Typen arbeite, schreibe ich eine Art Universal-Helferklasse "DString", die selbstständig verschiedene Typkonvertierungen durchführt.

Die Klasse enthält einen Member "mValue" vom Typ "char*".

Ich möchte im Programm nun etwas in eine Datei hineinschreiben. Dafür benötige ich einen String vom Typ char*.
Nichts einfacher als das, denn in der DString-Klasse wird der ja als char* gespeichert.

Ich habe zwei Möglichkeiten ausprobiert, die nach meinem Verständnis eigentlich das gleiche tun sollten:

Code:
public class DString {

	private: char* mValue;

	public:
	DString(char* pValue){
		mValue = pValue;
	}

	operator char*(){
		return mValue;
	}

	char* toCharPtr(){
		return mValue;
	}
};

DString* dstr = new DString("abcdefg");

char* char1 = (char*)dstr;       // "·ýýýýZOg0ÝÝ"
char* char2 = dstr->toCharPtr(); // "abcdefg"

Mit dem Konvertierungsoperato bekomme ich nicht den String sondern etwas, was für mich wie eine Speicheradresse aussieht, da es unabhängig von der Länge des Textes immer etwa gleich lang ist.

Die Zweite Version funktioniert.

Ich halte die erste Variante aber für effizienter. Nur, was mache ich falsch? Wie verwendet man den "operator"-Operator hier richtig?


Schönen Gruß,

André


Edit: Oh mann, eine Sekunde nachdem ich das hier postet hab, hab ich den Fehler gefunden:

Code:
char* char1 = (char*)*dstr;       // Das * vor dstr
 
Zuletzt bearbeitet:
Zurück