std::shared_ptr<MotionTask>
時々クレンジングする必要があるオブジェクトのベクトルがあります。
// this assert passes
assert(std::all_of(d_tasks.begin(), d_tasks.end(),
[](shared_ptr<MotionTask> task) { return bool(task); }));
// Remove any committed tasks for which the corresponding module has completed
d_tasks.erase(
remove_if(
d_tasks.begin(),
d_tasks.end(),
[module](shared_ptr<MotionTask> const& task)
{
return task->isCommitted() && task->getModule() == module;
}
)
);
// this assert fails
assert(std::all_of(d_tasks.begin(), d_tasks.end(),
[](shared_ptr<MotionTask> task) { return bool(task); }));
assert
タスクのベクトル内で 1 つが null (false) であるため、ファイナルは失敗しています。
erase
への呼び出しがメンバーを無効にする方法がわかりません。単体テストでこれを再現できませんでした。
上記のコードからわかる説明はありますか? そうでない場合、これをデバッグするにはどうすればよいですか?