オブジェクトポインタを要素として受け取る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*>());
};