回答編集履歴
2
微修正
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
その上で、データを上書きするのでかなり危険な感じがします。
|
9
9
|
|
10
10
|
TO は [std::is_trivially_copyable](https://ja.cppreference.com/w/cpp/types/is_trivially_copyable) が true ですが、trivially_copyableな型でも[コンストラクタを持てないわけではなさそう](https://cpprefjp.github.io/reference/type_traits/is_trivially_copyable.html)です。
|
11
|
-
しかし、上記ページにはis_trivially_copyable
|
11
|
+
しかし、上記ページにはis_trivially_copyableであれば std::memcpy 可能とも書かれていますね。例えば、副作用があるようなデフォルト・コンストラクタを持っている型へ std::memcpy ってリスキーな印象を受けます。
|
12
12
|
更にしかし、規格上それがプログラマの責任とされているのならば、cppreference のコードも規格内ということになりそうです。
|
13
13
|
|
14
14
|
そして、そのようなコンストラクタの発動を恐れる場合は、アライメントが取れているメモリ領域を確保してそこへ std:memcpy すればよいと思いますので、このような実装をする場合には、std::aligned_storage を使うとスマートにかけそうです。
|
1
リンク追加
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
cppreference のようなコードの場合、TO の領域を確保した時に TO のコンストラクタが走ると思います。
|
8
8
|
その上で、データを上書きするのでかなり危険な感じがします。
|
9
9
|
|
10
|
-
TO は [std::is_trivially_copyable](https://ja.cppreference.com/w/cpp/types/is_trivially_copyable) が true ですが、trivially_copyableな型でもコンストラクタを持てないわけではなさそうです。
|
10
|
+
TO は [std::is_trivially_copyable](https://ja.cppreference.com/w/cpp/types/is_trivially_copyable) が true ですが、trivially_copyableな型でも[コンストラクタを持てないわけではなさそう](https://cpprefjp.github.io/reference/type_traits/is_trivially_copyable.html)です。
|
11
11
|
しかし、上記ページにはis_trivially_copyableは std::memcpy 可能な型とも書かれていますね。例えば、副作用があるようなデフォルト・コンストラクタを持っている型へ std::memcpy ってリスキーな印象を受けます。
|
12
12
|
更にしかし、規格上それがプログラマの責任とされているのならば、cppreference のコードも規格内ということになりそうです。
|
13
13
|
|