在std::function<void()>
中传递指向[]
的指针时避免UB的最佳实践是什么?
如果未删除对象,cls_ptr
在second_on_finish
中始终有效吗?
这是当前代码:
void Foo()
{
SomeClass* cls_ptr = GetPointerToClass();
std::function<void()> first_on_finish = [cls_ptr]() {
if (some_argument == true)
{
std::function<void()> second_on_finish = [cls_ptr]() {
//cls_ptr is always valid here?
};
run_in_a_few_seconds(second_on_finish);
}
};
run_in_a_few_seconds(first_on_finish);
}
答案 0 :(得分:2)
如果未删除对象,则cls_ptr将始终在second_on_finish中有效
如果您的意思是cls_ptr
到那时还没有销毁-答案是是。指针是通过值(而不是它所指向的对象)捕获的,因此直到该地址处的对象被破坏为止,您才可以引用它。