c++ —— 局部值的地址可以逃脱函数

问题描述 投票:0回答:0

这是我的代码。我正在尝试制作 LRU 替换器,下面的代码是用 frame_id 驱逐一个框架。 我使用迭代器迭代 cache_list_(std::list),然后我将 *id 分配给 *frame_id 在 My Clion 中导致警告。这里有什么问题?

auto LRUKReplacer::Evict(frame_id_t *frame_id) -> bool {
  std::lock_guard<std::mutex> lock(latch_);
  // .....

  for (auto id = cache_list_.begin(); id != cache_list_.end(); id++) {
    if (is_evictable_.count(*id) == 0U) {
      continue;
    }
    *frame_id = *id; // warning:The address of the local value may escape the fubction
    cache_list_.remove(*id);
    use_count_[*frame_id] = 0;
    curr_size_--;
    is_evictable_.erase(*frame_id);
    return true;
  }
  // ..... 
}

为什么我会收到此警告,我该如何解决?

c++ pointers
© www.soinside.com 2019 - 2024. All rights reserved.