Puppyです。こんにちは。
構造体A型の変数a, bがあります。
コピーしたいのですが
memcpy(a,b,sizeof(a));
とやって、問題はないでしょうか?
とくにエラーが出るわけではないのですが
クラスのコピーはmemcpyしちゃダメって
聞いたことがあるので不安になり質問しました。
また
memcpy(a,b,sizeof(A));
との違いってあるんでしょうか?
よろしくお願いします。m(..)mぺこり
>memcpy(a,b,sizeof(a));
>とやって、問題はないでしょうか?
この場合、ありません。
>クラスのコピーはmemcpyしちゃダメって
>聞いたことがあるので不安になり質問しました。
この方法を使わない時が多いです。問題が発生するのを予め避ける為です。
使う時は下記のような時です。
[必要な時]
o コード量を減らしたい
o メンバ変数の数が多く、かつ些細な高速性ですら必要
[条件]
o (純粋)仮想関数が無い
o 仮想派生が無い
o 修正の可能性が無い。
>memcpy(a,b,sizeof(A));
>との違いってあるんでしょうか?
無いと思います。
質問が判り難いので、一部だけ答えます。
sizeof(A)…は構造体 A のサイズ
sizeof(a)…は構造体 A にある a のサイズです。
変数名が似ているので混乱しているのではないですか?
>クラスのコピーはmemcpyしちゃダメって聞いたことがある
どこで聞いたのですか?
すいません、質問をよく読んでいませんでした。
>memcpy(a,b,sizeof(A));
は A a,b;
としているのですよね?
では、memcpy(a,b,sizeof(b));
も同じ意味です
余計なことかもしれませんが、ちょっと気になったので。
> 構造体A型の変数a, bがあります。
> コピーしたいのですが
構造体をコピーするなら、シンプルに
a=b;
で良いのでは?
Puppyです。お返事くださった皆様、ありがとうございました。
>この方法を使わない時が多いです。問題が発生するのを予め避ける為です。
わかりました。ちょっとむずかしいので、そうします。
>構造体をコピーするなら、シンプルに
> a=b;
>で良いのでは?
これで大丈夫なんですね。(^-^;
ありがとうございました。
>クラスのコピーはmemcpyしちゃダメって聞いたことがある
たしかにしないほうがいいと思います。
構造体の場合でも、ポインタなどを含む場合はmemcpyなどはあまりお勧めできません。
クラスの場合も、メンバ変数にポインタなんかを含んでいる場合には危険でしょう。
(デストラクタなどで、メモリを破棄する処理していた場合など)
代入演算子やコピーコンストラクタを定義すれば問題ないでしょう。
ワルツさん お返事ありがとうございます。
>>クラスのコピーはmemcpyしちゃダメって聞いたことがある
>たしかにしないほうがいいと思います。
いろいろわからないことが多いので、とりあえずしないようにします。
もっと、もっと勉強しまーす。(*^-^*)
アドバイスありがとうございました。m(..)mぺこり