struct Test {
void doAction() {}
};
// Create and save into a void*
void *ptr = new Test;
// Real use through a Test*
Test *t = static_cast<Test *>(ptr);
t->doAction();
// Delete
delete static_cast<Test *>(ptr);
ptr wird nur zum Speichern der Adresse des Objekts verwendet, und die Adresse wird nur zum wahren Typ des Objekts dereferenziert.Ist das mit der strengen Aliasing-Regel in Ordnung?
Also, es sei denn, es ist auf einen nicht verwandten Typ dereferenziert, ist es ok mit der strengen Aliasing-Regel?
Kompilieren mit GCC mit -Fstrict-Aliasing –
Ja, es ist in Ordnung, solange Sie wissen, dass Sie in richtigen Typ Casting sind. Abgesehen davon würden Sie feststellen, dass dies an vielen Stellen geschieht, an denen C++ - Code mit C-Code interagiert (hauptsächlich bei asynchronen Callbacks). – Arunmu