我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之前迭代地图以删除每个指针?
指针只是指向.使用原始指针时,您需要知道应用程序的哪个部分拥有指针所指向的资源.如果它们由地图拥有,则需要迭代地图并在销毁地图之前在每个指针上调用delete.但是,如果地图只保存指向代码其他部分所拥有的对象的指针,则无需执行任何操作.
更安全的解决方案是使用shared_ptr来管理对象生存期,这将确保在销毁最后一个shared_ptr时正确删除对象.您可以将shared_ptrs存储在地图中,如果没有其他shared_ptr实例引用地图中的对象,则根据需要在销毁地图时将销毁对象.
| 归档时间: |
|
| 查看次数: |
10049 次 |
| 最近记录: |