传递指向std :: function <void()>的指针

时间:2019-04-17 10:09:18

标签: c++

std::function<void()>中传递指向[]的指针时避免UB的最佳实践是什么?

如果未删除对象,cls_ptrsecond_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);
}

1 个答案:

答案 0 :(得分:2)

  

如果未删除对象,则cls_ptr将始终在second_on_finish中有效

如果您的意思是cls_ptr到那时还没有销毁-答案是。指针是通过值(而不是它所指向的对象)捕获的,因此直到该地址处的对象被破坏为止,您才可以引用它。