stl map容器中指针的释放

来源:互联网 发布:留学办什么银行卡知乎 编辑:程序博客网 时间:2024/05/17 07:08
struct MyStruct
{
    int i;
    char c;

    MyStruct(int i, char c)
    {
        this->i = i;
        this->c = c;
    }
};

int stl_ptr_test()
{
    MyStruct* pst1 = new MyStruct(1, 'a');
    MyStruct* pst2 = new MyStruct(1, 'a');
    MyStruct* pst3 = new MyStruct(3, 'c');

    map<int, MyStruct*> map1; // 其中的value为指针型的

    map1.insert(pair<int, MyStruct*>(10, pst1));
    map1.insert(pair<int, MyStruct*>(11, pst2));
    map1.insert(pair<int, MyStruct*>(12, pst3));

    map<int, MyStruct*>::iterator iter = map1.find(11);
    cout << iter->second->i << ' ' << iter->second->c << endl;

    MyStruct* pst = iter->second;
    pst->c = 'b';

    iter = map1.find(11);
    cout << iter->second->i << ' ' << iter->second->c << endl;

    iter = map1.find(10);
    delete iter->second; // 释放指针
    map1.erase(10); // 从map中删除元素

    iter = map1.find(10);
    if (iter == map1.end())
    {
        cout << "not found" << endl;
    }
    else
    {
        cout << "found: " << iter->second->i << ' ' << iter->second->c << endl;
    }

    for (iter = map1.begin(); iter != map1.end();)
    {
        cout << iter->second->i << " " << iter->second->c << endl;

        delete iter->second; // 释放指针
        map1.erase(iter++); // 从map中删除元素,注意iter++的写法
    }

    map1.clear();

    return 0;
}