07項 newしたポインタのコンテナを使うときは、必ずポインタをdeleteした後にコンテナを破棄しよう

newしたポインタのコンテナを使うときは、必ずポインタをdeleteした後にコンテナを破棄しよう

newしたポインタのコンテナをの各要素のdeleteを忘れるとメモリリークが起こります。
なので、スマートポインタ(Boostのshared_ptrなど)のコンテナを作るべきです。


スマートポインタが使えない時は、for_eachで各要素のdeleteを行います。

struct DeleteObject{
    template<typename T>
    void operator ()(const T* ptr) const
    {
        delete ptr;
    }
};

void doSomething()
{
    deque<SpecialString*> dssp;

    for (int i = 0; i < 10; i++)
		dssp.push_back(new SpecialString);

    for_each(dssp.begin(), dssp.end(), DeleteObject());
}