Zastanawiam się, czy można bezpiecznie używać memcpy na strukturze zawierającej tablice i metody (tylko niektóre pobierające i ustawiające, ponieważ indeksowanie tablic jest niezwykłe i muszę je jakoś odwzorować). Wiem, że to jest bezpieczne dla POD i nie jestem pewien, czy mój struct byłby uważany za POD, czy nie?Czy można bezpiecznie dzielić strukturę za pomocą tablic i niektórych metod?
Odpowiedz
Możesz użyć memcpy
, jeśli struct
jest TriviallyCopyable.
Możesz sprawdzić czy twoja struct
jest trywialnie kopiowana za pomocą std::is_trivially_copyable
.
Ponadto, jak wskazano przez @JohanLundberg w komentarzu, adres docelowy musi być 0
modulo std::alignment_of<T>
. Więcej informacji na temat wymagań dotyczących wyrównania obiektów można uzyskać pod adresem http://en.cppreference.com/w/cpp/language/object#Alignment.
Co zabawne, obejmuje np. 'std :: atomic
Co z obawami związanymi z dostosowaniem? Czy nie musisz również upewnić się, że miejsce docelowe to 0 modulo std :: alignment_of
@JohanLundberg, dobry punkt. –
* Nie wirtualne funkcje użytkownika * tak. Zobacz https://isocpp.org/wiki/faq/intrinsic-types#pod-types. – dxiv