正确的方法来销毁具有指针值的地图

Max*_*Max 8 c++ pointers stl

std::map用来映射字符串值MyType *.我的地图声明如下所示:

map<string, MyType *> *my_map = new map<string, MyType>;
Run Code Online (Sandbox Code Playgroud)

my_map是我的一个类的私有成员变量.我的问题是我不确定如何破坏地图.删除地图时,我还想调用地图中包含的delete所有内容MyType *.这是我目前的析构函数:

my_map->erase(my_map->begin(), my_map->end());
delete my_map;
Run Code Online (Sandbox Code Playgroud)

这会删除地图中包含的指针,还是需要在调用erase之前迭代地图以删除每个指针?

Kyl*_*tan 8

指针只是指向.使用原始指针时,您需要知道应用程序的哪个部分拥有指针所指向的资源.如果它们由地图拥有,则需要迭代地图并在销毁地图之前在每个指针上调用delete.但是,如果地图只保存指向代码其他部分所拥有的对象的指针,则无需执行任何操作.

更安全的解决方案是使用shared_ptr来管理对象生存期,这将确保在销毁最后一个shared_ptr时正确删除对象.您可以将shared_ptrs存储在地图中,如果没有其他shared_ptr实例引用地图中的对象,则根据需要在销毁地图时将销毁对象.