Hi,
ich hab da ein etwas seltsames Problem, zumindestens meiner Logik nach.
Also, ich habe eine Klasse "BaseParentWidget", die unter anderem ein Variable vom Typ std::string enthält. Nun habe ich in dieser Funktion den Operator delete überladen.
Code:
void BaseParentWidget::operator delete(void *t)
{
cout << "Loesche Objekt " << ((BaseParentWidget *)t)->Name << " an Adresse " << t << endl;
}
Natürlich besitzt die Klasse auch einen Destruktor:
Code:
BaseParentWidget::~BaseParentWidget()
{
cout << "Destruktor des Objektes " << this->Name << " aufgerufen" << endl;
}
Nun mein Problem:
Ich lege im Programm ein Objekt normal mit "new" an, und zum Schluss möchte ich dies mit dem Aufruf "delete" löschen. Ich bekomme folgende Ausgabe vom Programm:


Destruktor des Objektes test aufgerufen
Loesche Objekt test
- und ab hier massenhaft kryptische Zeichen. Caste ich im delete-Operator die Variable noch nach "string" (was sie ja eigentlich ist), beendet sich das Programm direkt mit einem Segfault nach (erfolgreichen) Aufruf des Destruktors. Verwende ich im delete Operator aber folgenden Code:

Code:
void BaseParentWidget::operator delete(void *t)
{
cout << "Loesche Objekt " << ((BaseParentWidget *)t)->Name.data() << " an Adresse " << t << endl;
}
funktioniert alles Problemlos.

Laut meinem Verständnis sollte ja das Objekt samt Variablen noch vollständig existieren, da mir das Überladen des delete-Operators ja die Möglichkeit gibt das Freigeben des Speichers selbst zu "organisieren", und in "meiner" delete-funktion wird nichts freigegeben. Oder sehe ich da was falsch und C++ gibt den Speicher schon frei bevor meine Funktion aufgerufen wird?
Hat da jemand ne Idee oder Antwort auf dieses seltsame Verhalten?
Danke im Vorraus
the_easterbunny