C++17環境による開発です。
std::stringを含む構造体をコピーするコードとして下記を考えました。
c++
1struct Hoge{ 2 int a; 3 std::string b; 4}; 5 6int main() 7{ 8 Hoge dist{}; // コピー先 9 { 10 Hoge src{}; 11 src.a = 1; 12 src.b = "hogehoge"; 13 14 // コピー 15 std::memcpy(&dist, &src, sizeof(Hoge)); 16 } 17 18 // 結果出力 19 std::cout << dist.a << std::endl; 20 std::cout << dist.b << std::endl; 21}
実行した結果は、
1 hogehoge
となり、期待している結果です。
しかし、std::memcpyによるstd::stringを含む構造体のコピーは、コピー元が破棄された際に、コピー先の内容が不定となる危険性があるのではないかと考えています。
上記のようなstd::stringを含む構造体をstd::memcpyでコピーして問題ないのでしょうか?
不可だった場合、どのような解決策が考えられるでしょうか。
すぐに思いつく形としては、構造体Hogeにoperator=の演算子オーバーロードを追加し、メンバをひとつひとつコピーしていく形です。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/21 08:15
2021/07/21 08:33
2021/07/27 00:19