3

stlライブラリにポインタをコピーすることに関して質問があります。私が定義すると言う:

struct A{ int x; }

std::map<int, const A*> map1;

次に、Aへのポインタにmallocを使用して、ヒープからのメモリを使用してmap1にデータを入力します。

それから私はします

std::map<int, const A*> map2 = map1;

map2の構造体Aの各ポインターに対して、std :: mapはポインターのシャローコピーを実行しますか、それとも各ポインターのヒープから新しいメモリを割り当てますか?

乾杯

シャンカー

4

1 に答える 1

7

ポインタだけをコピーします。つまり、深いコピーではなく、浅いコピーが作成されます。簡単なテストプログラムを使用して、実際の動作を簡単に確認できます。

int main() {
    std::map<int, int*> map1;        
    map1[0] = new int(10);

    std::map<int, int*> map2 = map1;
    *(map2[0]) = 20;

    // this must print 20 if a shallow copy is used
    std::cout << *(map1[0]) << std::endl;
}
于 2012-07-24T16:58:52.707 に答える