gpt4 book ai didi

c++ - STL::map 中的指针

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:20 28 4
gpt4 key购买 nike

我有关于 std::map 的问题。

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

std::map <T1, T2*> my_map;
T1 t;
T2* tt = new T2;
my_map[t]=tt;

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

谢谢

最佳答案

map 销毁存储在 map 中的对象。该 map 存储了一些将被销毁的T1 对象,并存储了一些将被销毁的T2 指针。

但它存储实际的T2 对象。因此,不会销毁 T2 对象。

原始指针不拥有它们指向的对象的所有权。所以当一个指针被销毁时,它不会删除它指向的任何东西。

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

  • 它指向一个有效的对象根本(你不想在内存中的一些随机垃圾上调用delete),
  • 它指向的对象已经用new分配了(如果已经用其他方式分配了,不应该用delete删除),或者
  • 如果还有其他指针也指向同一个对象(在这种情况下,只有一个应该调用delete。哪个?)

因此,即使您愿意,也无法在指向对象的指针被销毁时自动删除该对象。

关于c++ - STL::map 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7835656/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com