![](/img/trans.png)
[英]What is the difference between is_trivially_copyable and is_trivially_copy_constructible?
[英]Why has a class to be std::is_trivially_copyable and not std::is_trivially_copy_constructible to be useable with memcpy
根據各種來源(例如cppreference.com ),一個類必須可以輕松復制才能與memcpy一起使用,但我不明白為什么一個簡單的復制可構造類是不夠的。 只要我確保析構函數被調用適當的時間,簡單的可復制類(如一個簡單的析構函數)的額外屬性應該無關緊要。
任何人都可以提供一個例子或解釋,當在一個類上使用memcpy時,例如一個非平凡的析構函數(或移動構造函數)會導致問題嗎?
只要我確保析構函數被調用適當的時間,簡單的可復制類(如一個簡單的析構函數)的額外屬性應該無關緊要。
那是一個很大的“如果”,不是嗎? 這些規則旨在保護您不要調用UB,如果按位復制需要非平凡破壞的對象是合法的,這將非常容易。 然后......那個非平凡的析構函數做了什么? delete
現在共享的資源? 這只是乞求三個規則的問題。
如果要復制資源管理一個復雜的對象,你真的應該被正確拷貝它,使用拷貝構造函數。 std::memcpy
是為了向后兼容,並且只應與沒有其他對象來管理的對象一起使用。 因為瘋狂就是這樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.