blu*_*kin 10 c++ pointers reference
以下代码生成悬空引用:
int main()
{
  int *myArray = new int[2]{ 100, 200 };
  int &ref = myArray[0];
  delete[] myArray;
  cout << ref;  // Use of dangling reference.
}
我知道我不应该删除的磁盘阵列,但在一个大的程序,如果有人有什么删除记忆,而我有一个参考?它可以以某种方式确保没有人删除阵列吗?
什么是反对悬挂引用和悬空指针的最佳策略?
Ste*_*end 14
完成之前不要删除内存.
听起来很愚蠢,但这是你唯一的保护 - 正确理解谁拥有每个变量背后的内存,以及何时可以安全地释放它.
智能指针可以提供帮助,但上述内容仍然适用.
有些静态分析工具可以识别你在这里遇到的琐碎案例,但即便如此,这应该是第二道防线,你的第一道就是内存管理学科.
保持它们的范围正确:
int main(){
  int *myArray;
  myArray = new int[2]{ 100, 200 };
  {
    int& ref = myArray[0];
    // use the ref here
    cout<<ref;  \\no longer a dangling reference
  } // ref falls out of scope here
  delete[] myArray;
 }
病人:医生,我这样做会很痛...
医生:那就别做...
引用内存时不要释放内存。
编辑
捕获问题的唯一方法是进行调试,进行良好的单元测试并在valgrind下运行,或者在valgrind下运行程序。