将指针传递给 std::function<void()>

passing pointer to std::function<void()>

本文关键字:lt gt void function 指针 std      更新时间:2023-10-16

[]中传递指向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);
}

如果不删除对象,cls_ptr在second_on_finish中是否始终有效

如果你的意思是cls_ptr当时没有被摧毁 - 答案是肯定的。指针是由值(而不是它指向的对象(捕获的,因此直到对象在该地址被销毁 - 您可以尊重它。