So löschen void-pointer?

Gibt es etwas falsch beim löschen eines Objekts, wie dies in C++?

MyCls* c = new MyCls();
void* p = (void*)c;
delete (MyCls*)p;
  • Ich glaube das nicht.
  • Casting einen Zeiger auf void * und dann zurück zu seiner ursprünglichen Art ist garantiert zu erhalten seinen Wert.
  • §5.2.9/13 "Ein Wert vom Typ Zeiger auf Objekt umgewandelt zu "Zeiger auf cv void" und zurück, möglicherweise mit unterschiedlichen cv-Qualifikation, hat seinen ursprünglichen Wert."
  • Warum würden Sie wollen, dies zu tun?
  • Aidley, weil ich wollte, verwenden Sie eine C++ - Klasse in C, so war es notwendig, void-Zeiger.
  • Ich denke, Sie sollten wahrscheinlich nach eine detailliertere Frage, die umreißt, was Sie tun und warum, weil ich stark vermute, dass du tust es in einer weniger als wünschenswert, wenn das der Fall ist.
  • Aber nicht sagen, was der resultierende Wert ist. Es sagt also ausdrücklich, die für andere Umbauten, wie "Ein rvalue vom Typ float umgewandelt werden können, um ein rvalue vom Typ double. Der Wert ist unverändert"

InformationsquelleAutor user3277361 | 2014-07-16
Schreibe einen Kommentar