構造体のコピー – プログラミング – Home

通知
すべてクリア

[解決済] 構造体のコピー


Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

Puppyです。こんにちは。

構造体A型の変数a, bがあります。
コピーしたいのですが

memcpy(a,b,sizeof(a));

とやって、問題はないでしょうか?
とくにエラーが出るわけではないのですが
クラスのコピーはmemcpyしちゃダメって
聞いたことがあるので不安になり質問しました。

また
memcpy(a,b,sizeof(A));
との違いってあるんでしょうか?

よろしくお願いします。m(..)mぺこり


引用未解決
トピックタグ
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

>memcpy(a,b,sizeof(a));
>とやって、問題はないでしょうか?
この場合、ありません。

>クラスのコピーはmemcpyしちゃダメって
>聞いたことがあるので不安になり質問しました。
この方法を使わない時が多いです。問題が発生するのを予め避ける為です。

使う時は下記のような時です。

[必要な時]
o コード量を減らしたい
o メンバ変数の数が多く、かつ些細な高速性ですら必要

[条件]
o (純粋)仮想関数が無い
o 仮想派生が無い
o 修正の可能性が無い。

>memcpy(a,b,sizeof(A));
>との違いってあるんでしょうか?
無いと思います。


返信引用
ちなみに
 ちなみに
(@ちなみに)
ゲスト
結合: 23年前
投稿: 4
 

質問が判り難いので、一部だけ答えます。
sizeof(A)…は構造体 A のサイズ
sizeof(a)…は構造体 A にある a のサイズです。
変数名が似ているので混乱しているのではないですか?

>クラスのコピーはmemcpyしちゃダメって聞いたことがある
どこで聞いたのですか?


返信引用
ちなみに
 ちなみに
(@ちなみに)
ゲスト
結合: 23年前
投稿: 4
 

すいません、質問をよく読んでいませんでした。
>memcpy(a,b,sizeof(A));
は A a,b;
としているのですよね?
では、memcpy(a,b,sizeof(b));
も同じ意味です


返信引用
sara
 sara
(@sara)
ゲスト
結合: 23年前
投稿: 99
 

余計なことかもしれませんが、ちょっと気になったので。

> 構造体A型の変数a, bがあります。
> コピーしたいのですが

構造体をコピーするなら、シンプルに
  a=b;
で良いのでは?


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

Puppyです。お返事くださった皆様、ありがとうございました。

>この方法を使わない時が多いです。問題が発生するのを予め避ける為です。

わかりました。ちょっとむずかしいので、そうします。

>構造体をコピーするなら、シンプルに
>  a=b;
>で良いのでは?

これで大丈夫なんですね。(^-^;
ありがとうございました。


返信引用
ワルツ
 ワルツ
(@ワルツ)
ゲスト
結合: 23年前
投稿: 21
 

>クラスのコピーはmemcpyしちゃダメって聞いたことがある

たしかにしないほうがいいと思います。
構造体の場合でも、ポインタなどを含む場合はmemcpyなどはあまりお勧めできません。
クラスの場合も、メンバ変数にポインタなんかを含んでいる場合には危険でしょう。
(デストラクタなどで、メモリを破棄する処理していた場合など)

代入演算子やコピーコンストラクタを定義すれば問題ないでしょう。


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

ワルツさん お返事ありがとうございます。

>>クラスのコピーはmemcpyしちゃダメって聞いたことがある
>たしかにしないほうがいいと思います。

いろいろわからないことが多いので、とりあえずしないようにします。
もっと、もっと勉強しまーす。(*^-^*)

アドバイスありがとうございました。m(..)mぺこり


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました