1

如果我有一个将对象指针作为元素的 STL 容器,我将需要删除具有此类容器的类的析构函数中的指针。由于删除指针的操作

delete ptr_; 
ptr_ = 0;

可能经常使用,我想知道是否有一个函数(或函数对象)模板可以做到这一点,在 boost 或 STL 中定义,或者在某个地方的标准定义为以下示例中定义的函数对象 DeletePointer:

#include <list>
#include <algorithm>

template<class Pointer>
class DeletePointer
{
    public: 
        void operator()(Pointer t)
        {
            delete t; 
            t = 0;
        }
};

using namespace std;

int main()
{
    list<double*> doublePtrList;

    doublePtrList.push_back(new double (0));
    doublePtrList.push_back(new double (1));
    doublePtrList.push_back(new double (2));
    doublePtrList.push_back(new double (3));

    for_each(doublePtrList.begin(), doublePtrList.end(), DeletePointer<double*>());
};
4

3 回答 3

3

如果(出于某种原因)您不能在集合中存储智能指针而不是原始指针,请考虑改用 Boost指针容器

于 2013-01-14T09:19:49.620 回答
1

正如其他人所建议的那样,尽可能使用智能指针而不是原始指针是个好主意。

但是,为了直接回答您的问题,在(C++11 中) 中std::default_delete定义了。<memory>

于 2013-01-14T09:19:04.287 回答
1

只需使用 std 的共享指针:

include <memory>

using namespace std;

int main()
{
    list<shared_ptr<double>> doublePtrList;

    doublePtrList.push_back(make_shared<double>(0.0));
    doublePtrList.push_back(make_shared<double>(1.0));
    doublePtrList.push_back(make_shared<double>(2.0));
    doublePtrList.push_back(make_shared<double>(3.0));

    //for_each(doublePtrList.begin(), doublePtrList.end(), DeletePointer<double*>());

    //For clearing just clear the list
    doublePtrList.clear();
};

共享指针在没有人引用它时自动释放删除内存(或者当最后一个引用停止引用它时更正确)

于 2013-01-14T09:19:52.897 回答