stl库在复制指针时使用malloc吗



我有一个关于在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是对指针进行浅层复制,还是从堆中为每个指针分配新的内存?

干杯

它将只复制指针。这意味着将制作浅层副本,而不是深层副本。您可以通过使用一个简单的测试程序来轻松地检查实际行为:

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

相关内容

  • 没有找到相关文章

最新更新