浅いコピーと深いコピー

shallow-deep-copy.png

浅いコピーは、オブジェクトの生成と削除でランタイムエラーを起こす場合がある。。
浅いコピーは、プログラマが本当にしたいことを理解している場合のみに使うべきである。
ほとんどの場合、
自裁のデータを複製することなく、複雑な構造体の情報を渡す必要があるときに浅いコピーが使用される。
浅いコピーの場合は、オブジェクトの破棄にも気を付けるべし。

構造体のサイズが小さいときは、ほとんどの場合、深いコピーを使う

サンプルソースコード

#include <stdio.h>
#include <conio.h>
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
struct Test{
    char* ptr;
    void print(){
        cout<<ptr<<endl;
    }
};
void shallow_copy(Test& src,Test& dest){
    dest.ptr=src.ptr;
}
void deep_copy(Test& src,Test& dest){
    cout<<"長さ:"<<strlen(src.ptr)<<endl;
    int size=strlen(src.ptr)+1;
    dest.ptr=(char*)malloc(size);
    memcpy(dest.ptr,src.ptr,size);
}
void main(){
    Test* a=new Test();
    a->ptr="miffy";
    puts("a:");
    a->print();
    Test* b=new Test();
    shallow_copy(*a,*b);
    puts("b:");
    b->print();
    Test*d =new Test();
    deep_copy(*a,*d);
    puts("d:");
    d->print();
 
    a->print();
    printf("終了するには何か押してください");
    _getch();
}

サポートサイト Wikidot.com