My question is the following:
If I want to copy a class type, memcpy can do it very fast. This is allowed in some situations.
We have some type traits:
If is_trivally_copyable
(or in C++14 is_trivially_copyable
, or in C++17 is_trivially_copyable_v
) is not zero, the type is copyable using memcpy
.
Per the C++ standard, a type being trivially copyable means:
the underlying bytes making up the object can be copied into an array of char or unsigned char. If the content of the array of char or unsigned char is copied back into the object, the object shall subsequently hold its original value.
However, it is important to realise that pointers are trivially copyable types, too. Whenever there are pointer inside the data structures you will be copying, you have to brainually make sure that copying them around is proper.
Examples where hazard may be caused by just relying on the object being trivially copyable:
So whenever memcopying, keep in mind to check whether pointers could be copied in that specific case, and if that would be okay.
Realise that is_trivially_copyable
is only the "Syntax Check", not the "Semantic Test", in compiler parlance.