2013-03-07 6 views
8

私はこれをグーグルで試してみましたが、結果としてオブジェクト指向の言語のポップアップが表示されます。Cでの浅いコピーとディープコピー

私の理解から、浅いコピーは構造体の特定のメンバーをコピーしています。

ので構造体がcharをコピー

typedef struct node 
{ 
    char **ok; 
    int hi; 
    int yep; 
    struct node *next; 
}node_t 

であると言うことができます**シャローコピー

が、全体のリンクリストをコピーする深いコピーだろうだろうか?

私は正しいアイデアを持っているのですか、私は道を離れていますか?ありがとう。

答えて

13

いいえこの特定のコンテキストのシャローコピーとは、オブジェクトへの「参照」(ポインタなど)をコピーし、これらの参照またはポインタのバッキングストアが同一であることを意味します。同じメモリの場所。

ディープコピーは、オブジェクト全体(構造体)をコピーすることを意味します。それが浅いか深くコピーすることができるメンバーがある場合、それらのディープコピーも作成します。次の例を考えてみます。

typedef struct { 
    char *name; 
    int value; 
} Node; 

Node n1, n2, n3; 

char name[] = "This is the name"; 

n1 = (Node){ name, 1337 }; 
n2 = n1; // Shallow copy, n2.name points to the same string as n1.name 

n3.value = n1.value; 
n3.name = strdup(n1.name); // Deep copy - n3.name is identical to n1.name regarding 
          // its *contents* only, but it's not anymore the same pointer 
0

コピーコンストラクタは、同じクラスの以前に作成されたオブジェクトで新しいオブジェクトを初期化するために使用されます。デフォルトでコンパイラは浅いコピーを書きました。動的メモリ割り当てが関係する場合、両方のオブジェクトがヒープ内の同じメモリ位置を指しているため、浅いコピーがうまく動作します。この問題を解決するために、ディープコピーを作成して、両方のオブジェクトに属性のコピーメモリに保存する。完全な例と説明で詳細を読むために、Shallow and Deep copy constructorsの違いについてこの記事の部分を見ることができます。

関連する問題