【问题标题】:vector inside a map is clear safe?地图内的矢量清晰安全吗?
【发布时间】:2014-04-11 21:08:47
【问题描述】:

只是一个简单的问题,如果你说:

using namespace std;

map< int, vector< string > > map1;

甚至可能:

map< int, map< int, vector< string > > > map2;

只是为了让你得到正确的想法:

map< int, map< int, map< int, vector< string > > > > map3;

如果我这样做:

map1.clear();
map2.clear();
map3.clear();

清空地图及其嵌套地图、向量、列表等中的所有内容是否安全?

注意: 我知道如果您使用需要手动遍历和删除的指针,或者如果地图超出范围也应该没问题,我只对在范围内和堆栈上的这种情况特别感兴趣。

【问题讨论】:

  • 你需要什么地图?

标签: c++ dictionary vector stl


【解决方案1】:

是的,地图会破坏所有组件。

如果它的组件是 STL 容器,它们的析构函数将清除容器。

阅读更多关于STL containers的信息,尤其是关于destructor of std::map的信息

【讨论】:

    【解决方案2】:

    是的,这是完全安全的。 STL 容器负责内存管理。

    但是,如果您存储指向您自己分配的对象的指针,您还必须自己删除它们:

    std::vector<MyClass*> vec;
    vec.push_back(new MyClass());
    vec.clear(); // you get a memory leak here because you did not delete the object you allocated.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多