Can I call `delete` on a vector of pointers in C++ via for_each ?

后端 未结 7 1633
醉梦人生
醉梦人生 2021-01-14 08:32

Suppose I have a std::vector objs (for performance reasons I have pointers not actual Objs).

I populate it with obj.push

7条回答
  •  轮回少年
    2021-01-14 09:09

    Yes, but you need a functor:

    struct delete_ptr
    {
        template 
        void operator()(T* pPtr)
        {
            delete pPtr;
        }
    };
    
    std::for_each(objs.begin(), objs.end(), delete_ptr());
    

    In C++0x, lambda's help you make functors in-place:

    std::for_each(objs.begin(), objs.end(), [](Obj* pPtr){ delete pPtr; });
    

    However, this is dangerous, in the face of exceptions. sbi has shown a solution.

提交回复
热议问题