deleteme - wieso funktioniert das nicht?
-
sebi707 schrieb:
Was heißt tot sein? Mit deinem
memsetnullst du einfach alle Membervariablen.Nicht einmal mal das.
Ein schönes Beispiel, warum man besser nicht mit memset und co herumspielt, wenn man nicht dringend muss.
-
von memset ist nur der Datenbereich des Objekts betroffen. Weder der Code, noch die Stringkonstante "hello".

-
Ich wollte nur das komplette Objekt löschen. u + p waren nicht wichtig.
Objekt x gibt aber immer noch hello() aus.Wie lösche ich mich also selbst?
Ist eher eine theoretische Geschichte.
-
EOP schrieb:
Ich wollte nur das komplette Objekt löschen. u + p waren nicht wichtig.
Objekt x gibt aber immer noch hello() aus.Was würdest du denn erwarten? Du gibst an keiner Stelle den Speicher des Objektes frei. Und selbst, wenn du dies tätest, würde es noch auf vielen Implementierungen funktionieren, da du innerhalb von hello this nicht referenzierst (auch wenn es UB ist).
Ein Objekt kann sich selbst per delete this löschen. Du musst dann natürlich extrem aufpassen, dass du innerhalb eines Members nach delete this nicht mehr this referenzierst. Außerdem musst du sicherstellen, dass das Objekt auf dem Heap liegt (bzw. du den richtigen Allokator benutzt). Wenn das Objekt auf dem Stack liegt, kann es sich nicht selbst zerstören.
Siehe https://isocpp.org/wiki/faq/freestore-mgmt#delete-this
-
EOP schrieb:
Ich wollte nur das komplette Objekt löschen. u + p waren nicht wichtig.
Objekt x gibt aber immer noch hello() aus.Weil das Objekt nach wie vor existiert. Objekte löschen geht so:
{ registered x; x.u = "user"; x.p = "pass"; } x.hello(); // geht nicht
-
EOP schrieb:
Wie lösche ich mich also selbst?
Definiere "löschen".
-
EOP schrieb:
Wie lösche ich mich also selbst?
Ist eher eine theoretische Geschichte.
Indem du z.B. x auf 0 setzt. Wenn kein Verweis mehr da ist, gilt das Objekt als verschollen.
-
Leprechaun schrieb:
EOP schrieb:
Wie lösche ich mich also selbst?
Ist eher eine theoretische Geschichte.
Indem du z.B. x auf 0 setzt. Wenn kein Verweis mehr da ist, gilt das Objekt als verschollen.
x ist aber kein Verweis.
-
Eigentlich dachte ich, daß ich zumindest eine Speicherzugriffsverletzung bekomme nachdem ich das Objekt genullt habe.
-
Leute\{SeppJ}, ihr müsst alle dringend noch mal an ein Grundlagenbuch in C++.
-
EOP schrieb:
Eigentlich dachte ich, daß ich zumindest eine Speicherzugriffsverletzung bekomme nachdem ich das Objekt genullt habe.
Wieso? Du greifst doch auf keinen Speicher zu. Und selbst wenn: Dann ist der Speicher eben Null, na und?
Deine Objektvorstellung scheint grundsätzlich falsch zu sein. Aber so richtig. Ich bin mir aber auch nicht sicher, wie ich sie korrigieren kann, da ich nicht einmal verstehe, was du dir vorstellst. Bist du eventuell der Ansicht, eine Funktion wäre Teil eines Objekts?
-
Ein kleiner Test hat sich zu einer ganz interessanten Geschichte entwickelt...
SeppJ schrieb:
Bist du eventuell der Ansicht, eine Funktion wäre Teil eines Objekts?
Ehrlich gesagt - Ja.
Bin aber immer bereit dazuzulernen.Ich dachte, wenn ich das Objekt (vermeintlich) lösche, ist auch der ganze andere Krempel weg bzw. "dangling in nowhere".
-
EOP schrieb:
Ein kleiner Test hat sich zu einer ganz interessanten Geschichte entwickelt...
War das ein Test, wie das Forum reagiert? Denn irgendwie kommt mir die Fragestellung komisch vor, für jemanden, der vor weniger als 24 Stunden erfolgreich eine Verwundbarkeit durch einen Buffer-Overflow-Fehler demonstriert hat.
-
SeppJ schrieb:
EOP schrieb:
Ein kleiner Test hat sich zu einer ganz interessanten Geschichte entwickelt...
War das ein Test, wie das Forum reagiert? Denn irgendwie kommt mir die Fragestellung komisch vor, für jemanden, der vor weniger als 24 Stunden erfolgreich eine Verwundbarkeit durch einen Buffer-Overflow-Fehler demonstriert hat.
Ne, war nur als Gag gedacht für die Leute, die sich gelöscht haben wollen. Hat aber anscheinend nicht geklappt.
Ich werde mit Sicherheit nicht c-plusplus.net angreifen. Bin einer von den Guten.

-
EOP schrieb:
Ich werde mit Sicherheit nicht c-plusplus.net angreifen. Bin einer von den Guten.

Nein, ich meinte das hier:
https://www.c-plusplus.net/forum/p2462714#2462714Von jemanden, der so etwas macht, die Frage in diesem Thread zu hören, ist wie wenn Franz Beckenbauer einen fragt, wie nochmal die Abseitsregel lautet.
Ne, war nur als Gag gedacht für die Leute, die sich gelöscht haben wollen. Hat aber anscheinend nicht geklappt.
War leider zu subtil.
-
SeppJ schrieb:
EOP schrieb:
Ich werde mit Sicherheit nicht c-plusplus.net angreifen. Bin einer von den Guten.

Nein, ich meinte das hier:
https://www.c-plusplus.net/forum/p2462714#2462714Von jemanden, der so etwas macht, die Frage in diesem Thread zu hören, ist wie wenn Franz Beckenbauer einen fragt, wie nochmal die Abseitsregel lautet.
Don't panic - der war ja nur eine Demo für den OP.
-
Zurück zum Thema:
Ich weiss immer noch nicht sicher, wie ich eine "Selbstzerstörungsfunktion" implementieren könnte.Viele Antworten aber nichts Überzeugendes.
-
EOP schrieb:
Zurück zum Thema:
Ich weiss immer noch nicht sicher, wie ich eine "Selbstzerstörungsfunktion" implementieren könnte.Definiere "Selbstzerstörung"!
-
SeppJ schrieb:
EOP schrieb:
Zurück zum Thema:
Ich weiss immer noch nicht sicher, wie ich eine "Selbstzerstörungsfunktion" implementieren könnte.Definiere "Selbstzerstörung"!
Ich möchte mich - also mein Objekt - von innen heraus zerstören/löschen.
Das ganze ist eigentlich nur eine blödsinnige Idee nachdem ich das gelesen hab:
https://www.c-plusplus.net/forum/332248#2462854Aber ausser dem Blödsinn-faktor fand ich die Idee dann doch ganz interessant.
-
Naja, delete this erfüllt genau deinen Wunsch.
Ich habe bisher auch schon mal delete this gebraucht, als ich mit einem lockfreien Algorithmus experimentiert habe, wo man sich viele Gedanken über memory reclamation machen muss.