c++ - 返回 const 引用或引用的方法会导致内存泄漏吗?

标签 c++ memory-leaks

我非常好奇从方法返回引用是否会导致内存泄漏。以下是示例情况。

class example
{
public:
  vector<int> & get_vect()
  {
     return vect;
  }
  int & get_num()
  {
    return num;
  }
private:
  vector<int> vect;
  int num;
};


void test_run(example & input)
{ 
   int & test_val = input.get_num();
   vector<int> & test_vect = input.get_vect();
}

int main()
{
  example one;
  test_run(one);
  return 0;
}

我的问题是 test_valtest_vecttest_run 退出时从堆栈中移除。 test_vecttest_val 是否被删除从而导致对象 1 损坏?

最佳答案

没有。引用是其他事物的别名(或名称)。您可以将其视为一个永不拥有的指针,指向没有指针语义的东西(以及它们的陷阱,尽管引用本身有一些曲折)。

当函数 test_run 退出时,引用消失了,只有它们消失了。他们提到的内容在内存方面没有被触及,也没有被删除。

此外,由于您只处理具有自动存储持续时间且在构造期间不涉及动态内存的变量,因此您根本不会在那里发生内存泄漏。您可能会遇到其他问题,例如尝试删除指向此类变量的指针(尝试只产生 core dump on coliru )但不会泄漏。

关于c++ - 返回 const 引用或引用的方法会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25810664/

相关文章:

c++ - basic_string 预期初始化程序编译错误

c++ - 派生类 C++

c++ - 如何将 Haskell LLVM passes 与 C++ LLVM passes 集成(如果有的话)?

c++ - 如何确定一个数字的基数?

c++ - 在没有第 3 方工具/项目的情况下查找 MFC C++ 发布版本中的内存泄漏

c++ - 如何解决 munmap_chunk() : invalid pointer error in C++

javascript - JQuery on() 的使用和覆盖

c++ - 如何将球面贴图投影到球体/立方体上 : "Equirectangular to cubic"

c++ - 错误 glibc 检测到 free() : invalid next size(fast)

具有预定义大小的 C++ 数组作为成员变量和内存泄漏