2015-11-16 8 views
5

Diziler ve yöntemler içeren bir yapıda memcpy kullanmanın güvenli olup olmadığını merak ediyorum (dizilerin endekslenmesi olağandışı olduğundan bazı alıcılar ve ayarlayıcılar olağan dışıdır ve bir şekilde haritalamam gerekir). POD'lar için güvenli olduğunu biliyorum ve yapmamın POD olarak kabul edilip edilmeyeceğinden emin değilim?Dizilerle ve bazı yöntemlerle memcstr yapısında güvenli midir?

+0

* Sanal olmayan * üye işlevleri, evet. Https://isocpp.org/wiki/faq/intrinsic-types#pod-types sayfasına bakın. – dxiv

cevap

10

structTriviallyCopyable ise memcpy kullanabilirsiniz.

struct ürününüzün std::is_trivially_copyable numaralı ürününü kullanarak kopyalanamaz olup olmadığını kontrol edebilirsiniz. Bir yorumda @JohanLundberg tarafından belirtildiği gibi, hedef adresin 0 modulo std::alignment_of<T> olması gerekir. http://en.cppreference.com/w/cpp/language/object#Alignment adresindeki nesnelerin hizalama gereksinimleri hakkında daha fazla bilgi edinebilirsiniz.

+0

Yeterli derecede, örn. std :: atomic 'veya açıkça silinmiş bir kopya semantiği olan türler. –

+1

Hizalama endişeleri ne durumda? Ayrıca hedefin 0 modulo std :: alignment_of olduğundan emin olmanız gerekmez mi? –

+0

@JohanLundberg, iyi nokta. –

İlgili konular