memcpy/memset/memmoveを使う際の注意点

TriviallyCopyableでないオブジェクトに使うと未定義動作になるので使ってはいけない。

使う場合はstd::is_trivially_copyable_vで未定義動作にならない型なのかをチェックしてから使うのが吉。
https://cpprefjp.github.io/reference/type_traits/is_trivially_copyable.html

class MyClass {
  // ...
};

MyClass hoge;
MyClass mosa;

// memcpyを利用する前に型がTriviallyCopyableかのチェックを挿入する
static_assert(std::is_trivially_copyable_v<MyClass>);
std::memcpy(&hoge, &mosa, sizeof(MyClass));

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です