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 Mobile version
 Mobile version