C++ 存储指针的容器删除元素

假设需要用vector等容器存储指针,形如vector<typename *>,在删除元素的时候,仅仅使用erase改变了容器的存储,却没有释放指针所指向的内存,一不小心就造成了内存溢出。
故,我们需要在erase的同时释放内存。

template<typename T>
void deleteObject(T *obj){
    delete obj;
    obj = NULL;
}

class Base{
    static int count;
public:
    Base() { count++; cout<<"Base(): "<<count<<endl; }
    ~Base() { cout<<"~Base(): "<<count<<endl; count--; }
};

int Base::count = 0;

int main(){
    vector<Base*> elements;
    elements.push_back(new Base());
    elements.push_back(new Base());
    elements.push_back(new Base());

    while(!elements.empty()){
        vector<Base*>::iterator it = elements.end();
        elements.erase(--it);  // not call destruction function.
        deleteObject(*it);    // call destruction function.
    }
    return 0;
}
/*
Base(): 1
Base(): 2
Base(): 3
~Base(): 3
~Base(): 2
~Base(): 1
*/
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/theArcticOcean/article/details/79311656
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭