在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);
}发布于 2019-04-17 10:15:25
如果对象未被删除,cls_ptr在second_on_finish中是否始终有效?
如果你的意思是cls_ptr那时还没有被摧毁--答案是,是,。指针是由值(而不是它所指向的对象)捕获的,所以直到在该地址销毁对象为止--您可以遵从它。
https://stackoverflow.com/questions/55725113
复制相似问题