stl :: map中的指针

Ruc*_*chi 1 c++

我有关于std :: map的查询.

如果我有一个std :: map,如:

std::map <T1, T2*> my_map;
T1 t;
T2* tt = new T2;
my_map[t]=tt;
Run Code Online (Sandbox Code Playgroud)

谁负责清理这个容器,T2的析构函数会处理它(T2*tt).此外,如果我想在整个程序中保留此容器,我应该在哪里清理它.

谢谢

jal*_*alf 5

地图会破坏地图中存储的对象.地图存储了一些T1将被销毁的对象,并存储了一些T2指针,这些指针将被销毁.

但它并没有存储实际T2的对象.所以没有T2对象会被破坏.

原始指针不具有所指向对象的所有权.因此,当指针被销​​毁时,它不会删除它指向的任何内容.

一般来说,当你有一个指针时,无法知道是否

  • 它指向一个有效的对象在所有(你不想打电话delete对内存的一些随机的垃圾),
  • 它指向的对象已经被分配new(如果它已经以另一种方式分配,它不应该被删除delete),或者
  • 如果有其他指针也指向同一个对象(在这种情况下只有一个应该调用delete.哪一个?)

因此,即使您想要,也无法在指向它的指针被销毁时自动删除该对象.