クラスの std::list があり、削除対象としてマークされたエントリを削除したいと考えています。std::remove_if と erase を使用しています。
class MyClass
{
bool isDone(MyData& myData)
{
return myData.isDone();
}
void removeIfDone(std::list<MyData>& myList)
{
std::list<MyData>::iterator it =
remove_if(myList.begin(), myList.end(),
boost::bind(&MyClass::isDone, this, _1));
myList.erase(it, myList.end());
}
};
メモリの割り当てと割り当て解除が非常に高価な小さなプロセッサで実行しています。この remove は、私のアプリケーションで new と delete を何千回も呼び出しています。
私は以前boost::ref
、重要な変数をバインド パラメータとして渡すときに使用していましたが、この場合、問題を引き起こしているのはおそらくファンクタ自体の作成と破棄、またはそのコピーであると思います。
私は次のようなことをしたいと思います
boost::bind(&MyClass::isDone, boost::ref(this), boost::ref(_1));
作成および破棄されているものに関するドキュメントが見つかりません。私の簡単な質問は、これをより効率的にするにはどうすればよいかということです。