2012-07-24 35 views
3

我有一个关于在stl库中复制指针的问题。说我定义:stl库在复制指针时使用malloc吗?

struct A{ int x; }

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

然后我使用malloc的指针A.

话,我使用的内存从堆中填充MAP1

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

对于map2中struct A的每个指针,std :: map做一个浅表副本指针,还是从每个指针的堆中分配新的内存?

干杯

刺刀

回答

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; 
} 
+0

感谢您的回答betabandido。非常清楚。 – crystalbass17 2012-07-25 09:12:26