我有一个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
失败,因为在任务向量中,一个为空(假)。
我不明白调用如何erase
使成员无效。我无法在单元测试中重现这一点。
从上面的代码中是否可以观察到解释,如果没有,我可以尝试调试什么?