空指针传递给lambda函数不再为空

Null pointer passed to lambda function is not null anymore

本文关键字:不再 函数 lambda 空指针      更新时间:2023-10-16

我尝试将null指针作为对lambda函数的引用,但它将接收一个内存地址而不是保持null。

  function<void(json)> doTheThing(){
  ...
  pointer = nullptr;
  return [&](json object) {
    if(pointer != nullptr) {
       cout<<"pointer not null";
}
}

任何想法如何通过该指针,以保持零?

[&]表示隐式捕获。

如果您通过引用捕获某些内容,则只要存在,它才保持在定义的状态中。您似乎正在返回转换为std::function的lambda。通过引用捕获是一个非常糟糕的主意。

局部变量超出范围。在lambda中捕获的对其的引用现在处于未定义状态,所有使用都是不确定的行为。然后,您将此lambda的副本返回std::function,调用它,然后鼻恶魔将您的鼻子射出;或者以您的情况,指针不会出现null。

永远不要在其寿命(其副本寿命)将超过当前范围的lambda中隐式捕获。

通常,即使使用[=],也永远不会隐式捕获这种情况。明确。

std::function<void(json)> doTheThing() {
  void* pointer = nullptr;
  return [pointer](json object) {
    if(pointer != nullptr) {
      std::cout<<"pointer not null";
    }
  };
}