Wenn die Objekte nicht triviellkopisch sind (z. B. Scalars, Arrays, c-compatible Strukturen), ist das Verhalten nicht uneffizient. />
Bei meiner Arbeit haben wir seit langem STD :: memcpy < /code> bis bitgewise Swap -Objekte verwendet, die unter: < /p>
nicht trivial kopiert werden können
Code: Select all
void swapMemory(Entity* ePtr1, Entity* ePtr2)
{
static const int size = sizeof(Entity);
char swapBuffer[size];
memcpy(swapBuffer, ePtr1, size);
memcpy(ePtr1, ePtr2, size);
memcpy(ePtr2, swapBuffer, size);
}
< /code>
und hatte nie Probleme. Meine Frage jedoch: < /p>
Warum sollte das Verhalten von std :: memcpy < /code> selbst nicht definiert werden, wenn sie mit nicht trivial kopischen Objekten verwendet werden? Warum hält der Standard für notwendig, dies zu spezifizieren? The current description says:
If the objects are not TriviallyCopyable (e.g. scalars, arrays, C-compatible structs), the behavior is undefined unless the program does not depend on the effects of the destructor of the target object (which is not run by memcpy