3

我有一个关于在 stl 库中复制指针的问题。说我定义:

struct A{ int x; }

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

然后,我使用堆中的内存填充 map1,使用 malloc 作为指向 A 的指针。

然后我做

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 回答