2015-11-16 5 views
5

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?

+0

* Nie wirtualne funkcje użytkownika * tak. Zobacz https://isocpp.org/wiki/faq/intrinsic-types#pod-types. – dxiv

Odpowiedz

10

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.

+0

Co zabawne, obejmuje np. 'std :: atomic ' lub typy z jawnie usuniętą semantyką kopiowania. –

+1

Co z obawami związanymi z dostosowaniem? Czy nie musisz również upewnić się, że miejsce docelowe to 0 modulo std :: alignment_of ? –

+0

@JohanLundberg, dobry punkt. –

Powiązane problemy